如果文件被删除,C++ Catch

标签 c++ ofstream

我有一些循环运行并写入文件的基本代码。它看起来是这样的:

std::ofstream myFile;
myFile.open("file.txt", std::ofstream::out);
while (true)
{
    if (myFile.is_open() && myFile.good())
    {
        myFile << "test" <<std::endl;
    }
    if (myFile.fail())
    {
        std::cout << "Error\n";
    }
}

如果我手动插入 myFile.setstate() 并将其设置为失败,则一切正常但会出错。

但是,如果我让程序在一个循环中写入一个文件,然后我手动继续并删除该文件...程序似乎继续写入文件,就好像它仍然存在一样。不会抛出任何错误。我想也许使用 flush() 会起作用,因为我希望它设置故障位,但行为似乎没有改变。我究竟做错了什么?

有没有一种方法可以检查文件是否突然丢失,而无需再次尝试调用 open()? (我试图避免在循环中使用 .open() 和 .close()。而是在开始时打开,然后在超出范围时将其关闭。)

最佳答案

我认为没有一种可移植的方法可以做到这一点。许多操作系统的设计使得如果您删除正在写入的文件,该文件看起来已删除但仍然存在,直到最后一个写入它的程序关闭。其他人甚至不允许您删除正在写入的文件。 C++ 标准对于在这种情况下应该发生什么没有任何保证,所以我认为您需要使用特定于平台的 API 来测试文件在写入时是否仍然存在。

关于如果文件被删除,C++ Catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35851153/

相关文章:

Android gradle 实验性插件路线图

c++ - 替换 sleep 直到桌面上的窗口打开

c++ - 位成员倒序?

c++ - 如何使用递归在 .txt 中写入多行?

C++ Ofstream 换行

c++11 - 流的初始值设定项列表 (C++11)

c++ - 字符串管理 C/C++ & 读写 txt 文件

c++ - 指针 - 删除

c++ - ofstream.is_open() 在使用 VS 2015 的 DirectX12 应用程序中始终为 false

C++ 动态分配数组;大小由用户输入的数量设置;写入文件;