C++ C++;捕获文件是否已删除

C++ C++;捕获文件是否已删除,c++,ofstream,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::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";
    }
}
std::of stream myFile;
打开(“file.txt”,std::ofstream::out);
while(true)
{
if(myFile.is_open()&&myFile.good())
{

MyFrase

我不相信有一种可移植的方式来做这个操作。许多操作系统都是这样设计的,如果删除一个正在写入的文件,文件就会被删除,但是直到最后一个程序写入它为止,它仍然存在。其他文件甚至不允许你删除所有被写入的文件。C++标准没有任何瓜尔豆。antees解释了在这种情况下应该发生什么,因此我认为您需要使用特定于平台的API来测试文件在写入时是否仍然存在。

C++17具有包含exists方法的std::filesystem。或者您可以将boost::filesystem与旧的编译器一起使用

#ifdef __cpp_lib_filesystem
  #include <filesystem>
  namespace FS = std::filesystem;
#else
  #include <boost/filesystem.hpp>
  namespace FS = boost::filesystem;
#endif
boost::filesystem::exists使用::stat(),据估计,它只需要1微秒,所以不太可能对速度造成太大影响

  if(myFile.is_open() && !FS::exists("file.txt"))
  {
    myFile.close();
    myFile.open("file.txt", std::ofstream::out | std::ofstream::app);
  }