我有一些在循环中运行并写入文件的基本代码.它看起来像是:
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";
}
}
Run Code Online (Sandbox Code Playgroud)
如果我手动插入myFile.setstate()并将其设置为失败,一切正常并且出错.
但是,如果我让程序在循环中写入文件然后我手动继续删除文件...程序似乎继续写入文件,就像它仍然存在一样.不会抛出任何错误.我想也许使用flush()会工作,因为我期望它设置failbit,但行为似乎没有改变.我究竟做错了什么?
有没有办法检查文件是否突然丢失,而不是试图再次尝试调用open()?(我试图在循环中避免使用.open()和.close().而是在开始时打开,然后在超出范围时将其关闭.)
我不相信有一种可移植的方式来做到这一点.许多操作系统的设计使得如果删除正在写入的文件,该文件将被删除但仍然存在,直到写入它的最后一个程序关闭.其他人甚至不允许您删除正在写入的文件.C++标准对这种情况下应该发生的事情没有任何保证,所以我认为你需要使用特定于平台的API来测试文件在写入时是否仍然存在.
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |