首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fstream以std::fstream::in | std::fstream::out | std::fstream::app模式打开文件

Fstream以std::fstream::in | std::fstream::out | std::fstream::app模式打开文件
EN

Stack Overflow用户
提问于 2014-03-12 08:30:13
回答 2查看 5.3K关注 0票数 1

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

我可以在- std::fstream::in | std::fstream::out | std::fstream::app模式下创建并打开此文件吗?我需要这样做,因为我必须使用这个句柄来完成这两个操作-读取和写入到文件的末尾。

但是,这并不是在创建文件。这就是我所拥有的:

代码语言:javascript
复制
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。但是不会创建该文件。有没有人能帮我弄明白我做错了什么,解决我的问题的正确方法是什么?

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

EN

回答 2

Stack Overflow用户

发布于 2014-03-12 08:44:44

因此,读取std::stream open方法上的文档时,当在open中指定' in‘和'app’时,打开看起来将失败。试着把“in”去掉,看看会发生什么。

如果模式同时设置了trunc和app,则打开操作将失败。如果设置了其中一项但未设置out,或者同时设置了app和in,则打开操作也会失败。

std::fstream reference

票数 1
EN

Stack Overflow用户

发布于 2014-03-12 08:47:39

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22339594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档