Jac*_*148 4 c++ file-io operating-system
我正在尝试删除文件夹中的所有文件,但是如果文件保持打开状态,则不会删除。我需要检查文件夹中是否有打开的文件,将其名称写入文本文档,然后关闭打开的文件。由于我经验不足,因此我首先尝试检查同一文件夹中的一个文件,然后再检查同一文件夹中的所有文件,然后再检查其他文件夹中的所有文件。我不想有需要或要求,所以第一步的一些帮助会很好。
我没有大量的编码经验,但是我尝试使用fstream和(name.is_open)。我可能错误地使用了它们,因此我还没有排除它们。
// ifstream::is_open
#include <iostream> // std::cout
#include <fstream> // std::ifstream
void checkFiles() {
int done = 0;
while(done != 1){
std::cout << "Enter 0 for continue or 1 for done: ";
std::cin >> done;
std::ifstream ifs ("test.txt");
if (ifs.is_open()) {
// Print that file is open, then close
std::cout << "File is open\n";
std::ifstream.close():
}
else {
std::cout << "File not open\n";
}
}
Run Code Online (Sandbox Code Playgroud)
对于这段代码,如果文件已打开,则应显示“文件已打开”。如果不是,则应显示“文件未打开”
即使我强行退出.txt文件,它仍然表示它是打开的。
最终,我想要一个新文件,该文件显示打开了哪些文件以及关闭所有打开的文件。
ein*_*ica 10
标准C ++为我们提供了处理文件和目录的文件系统库(在C ++ 17中已标准化)。但是,据我所知,检查打开的文件不是该库的功能。
的s is_open()方法与std::fstream您要检查的方法完全不同:它告诉您特定的流对象是否处于打开状态(这意味着与打开的文件关联),并且不使用操作系统检查哪些文件已打开。通常,这只是一种检查是否已在自己的程序中将其关闭的方法。最多可以确保操作系统没有单方面关闭操作系统端文件访问句柄。因此,您将无法朝那个方向前进。
我也相信,尽管我不是100%肯定,但Boost也没有提供此功能的库。Boost的filesystem库几乎与相同std::filesystem,因为后者基于该库。
因此,据我所知,您可能需要直接使用特定于操作系统的调用来执行此操作,或者在其他地方寻找提供此功能的库。
如果您没有找到其他任何内容,则可以利用用户空间中的可用功能来跟踪当前的操作方式。有一个名为的实用程序lsof。它在基于Linux,Darwin,FreeBSD和Solaris的某些操作系统上可用(例如,在MacOS上可用)。在这里维护。源代码似乎是非常残酷的C。一个勇敢的开发人员可以解析混乱,弄清楚它的作用,提取与您的特定用例相关的部分,并将其重构为合理,易读且简短的C ++函数。我意识到您(OP)目前可能还没有做到这一点,但是-也许其他人正在阅读此答案会受到启发。
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |