首页 文章

Fstream在std :: fstream :: in中打开文件std :: fstream :: out | std :: fstream :: app模式

提问于
浏览
1

我需要能够创建一个不存在的文件 . 设计如下:我有1个线程用于所有文件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 . 但是文件没有被创建 . 谁能帮助我理解我在这里做错了什么,以及解决我的问题的正确方法是什么?

另外,如果唯一的替代方法是必须使用不同的文件句柄,一个用于追加(需要在这里创建)和一个用于读取,如果我在读取文件句柄仍然打开时读取文件是否可以?此外,如果不存在并追加,那么开放模式应该是什么?

2 回答

  • 0

    因此,在std :: stream open方法中阅读文档,当打开时指定'in'和'app'时,open看起来会失败 . 尝试离开'in',看看会发生什么 .

    “如果模式同时设置了截断和应用程序,则打开操作将失败 . 如果设置了任何一个但未输出,或者如果设置了app和in,它也会失败 . ”

    std::fstream reference

  • 1

    根据C 98文档(我假设您使用的是C 98),您无法使用两种模式 inapp 打开文件 .

    至于在文件上有多个句柄,这应该有帮助:Reading and writing to the same file using the same fstream .

相关问题