std :: fstream如何在进出中工作?

NPS*_*NPS 6 c++ io fstream

我刚开始想知道 - 如何实际std::fstream打开这两个std::ios::in并且std::ios::out实际上应该工作?它该怎么办?写一些东西(例如)一个空文件,然后读......什么?刚写的价值?文件"指针"/"光标"在哪里?也许答案已经在那里,但我无法找到它.

0x4*_*2D2 6

什么是std::fstream

std::fstream是一个双向文件流类.也就是说,它为文件的输入和输出提供了一个接口.当用户需要读取和写入相同的外部序列时,通常使用它.

当实例化的双向文件流(不像std::ofstreamstd::ifstream)时,openmodes ios_base::inios_base::out指定默认.这意味着:

std::fstream f("test.txt", std::ios_base::in | std::ios_base::out);
Run Code Online (Sandbox Code Playgroud)

是相同的

std::fstream f("test.txt");
Run Code Online (Sandbox Code Playgroud)

如果他们需要还增加了一些非默认openmodes比如人们会指定这两个选项trunc,ate,app,或binary.的ios_base::trunc,如果你打算需要用于openmode 创建双向I/O的新文件,因为ios_base::in用于openmode禁用新文件的创建.

双向I/O.

双向I/O是对输入和输出使用双向流.在IOStreams中,标准流将其字符序列保存在缓冲区中,在缓冲区中,它用作数据的源或接收器.对于输出流,有一个"put"区域(保存输出字符的缓冲区).同样,对于输入流,还有"获取"区域.

std::fstream(输入输出的类)的情况下,它保存一个联合文件缓冲区,分别代表get和put区域.标记文件中当前位置的位置指示器受输入输出操作的影响.因此,为了在双向流上正确执行I/O,您必须遵循某些规则:

  • 在写入后执行读取(反之亦然)时,应重新定位流.
  • 如果输入操作到达文件结尾,则此后直接执行写操作就可以了.

这只是指std::fstream.不需要上述规则std::stringstream.

我希望这些能回答你的问题.如果您还有,您可以在评论中提问.