2016-03-07 91 views
2

我有一些基本的代码,在循环中运行并写入文件。它看起来沿着线:C++如果文件被删除,赶上

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()在循环中,而是在开始打开,然后让它关闭时,它超出了范围。)

回答

6

我不相信有一个便携式这样做的方法。许多操作系统的设计使得如果您删除正在写入的文件,该文件将显示为已删除,但在写入最后一个程序关闭前仍然存在。其他人甚至不会让你删除正在写入的文件。 C++标准对这种情况下应该发生的事情没有任何保证,所以我认为您需要使用特定于平台的API来测试在写入文件时文件是否仍然存在。