以std:: Fstream::in | std:: Fstream::out | std:: Fstream::app

Fstream open file in std::fstream::in | std::fstream::out | std::fstream::app mode

本文关键字:Fstream std app out in      更新时间:2023-10-16

我需要能够创建一个不存在的文件。设计如下:我有一个线程用于所有文件IO,并且在封装文件的数据结构中,我有一个std::fstream file_handle。

我能以- std::fstream::in | std::fstream::out | std::fstream::app模式创建并打开该文件吗?我需要这个,因为我必须使用这个句柄来做这两件事-读取和写入到文件的末尾。

然而,这并不是在创建文件。我有:

class file_io
{
   std::string filename;
   std::fstream file_handle;
   file_io(std::string name)
   {
      filename = name;
   }
   void open_file()
   {
      if(!file_handle.is_open())
      {
          file_handle.open(filename.c_str(), std::fstream::in | std::fstream::out | std::fstream::app);
          if(!file_handle.is_open())
          {
              std::cout << "Could not open file " << filename ;
          }
          else
          {
              std::cout << "successfully opened file " << filename;
          }
      }
   }
   ~file_io()
   {
      if(file_handle.is_open)
      file_handle.close();
   }
};

每次需要写入文件末尾或读取文件内容时,我调用open_file。但是文件不会被创建。有没有人能帮助我了解我在这里做错了什么,以及解决我的问题的正确方法是什么?

另外,如果唯一的选择是必须有不同的文件句柄,一个用于追加(需要在这里创建)和一个用于读取,如果我读取文件,而追加的文件句柄仍然打开,它是可以的吗?另外,create if不存在和append的打开模式应该是什么?

所以阅读std::stream open方法的文档,看起来当'in'和'app'都在open中指定时,open将失败。试着把"in"关掉,看看会发生什么。

"如果模式同时设置了trunc和app,则打开操作失败。如果其中一个设置了,但out没有设置,或者app和in都设置了,它也会失败。"

std:: fstream参考

根据c++ 98文档(我假设您正在使用c++ 98),您不能同时使用inapp模式打开文件。

对于在一个文件上有多个句柄,这应该有帮助:使用相同的fstream对同一个文件进行读写。