【问题标题】:How is std::fstream with both in and out supposed to work?输入和输出的 std::fstream 应该如何工作?
【发布时间】:2013-04-23 16:54:34
【问题描述】:

我刚开始想知道 - 实际上std::fstream 是如何打开的,std::ios::instd::ios::out 实际上应该工作?它应该怎么做?写一些东西到(例如)一个空文件,然后读......什么?只是写值?文件“指针”/“光标”在哪里?也许答案已经存在,但我就是找不到。

【问题讨论】:

    标签: c++ io fstream


    【解决方案1】:

    std::fstream 是什么?

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

    在实例化双向文件流时(与 std::ofstreamstd::ifstream 不同),默认情况下会指定打开模式 ios_base::inios_base::out。这意味着:

    std::fstream f("test.txt", std::ios_base::in | std::ios_base::out);
    

    相同
    std::fstream f("test.txt");
    

    如果他们还需要添加一些非默认打开模式,例如truncateappbinary,则可以指定这两个选项。如果您打算创建一个用于双向 I/O 的新文件,则需要 ios_base::trunc 打开模式,因为 ios_base::in 打开模式会禁用新文件的创建。

    双向 I/O

    双向 I/O 是对输入和输出的双向流的利用。在 IOStreams 中,标准流将其字符序列保存在缓冲区中,用作数据的源或接收器。对于输出流,有一个“放置”区域(保存输出字符的缓冲区)。同样,对于输入流,也有“获取”区域。

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

    • 当您在写入后执行读取或反之亦然时,应重新定位流。
    • 如果输入操作到达文件末尾,则之后直接执行写入即可。

    这仅指std::fstreamstd::stringstream 不需要上述规则。

    我希望这些回答您的问题。如果你还有什么,可以在 cmets 中询问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-08
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      相关资源
      最近更新 更多