gpt4 book ai didi

c++ - std::fstream 应该如何工作?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:46 29 4
gpt4 key购买 nike

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

最佳答案

什么是std::fstream

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

当实例化双向文件流时(不同于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");

如果他们还需要添加一些非默认的打开模式,例如 truncateapp二进制。如果您打算创建双向 I/O 的新文件,则需要 ios_base::trunc openmode,因为 ios_base::in openmode禁止创建新文件。

双向输入/输出

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

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

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

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

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

关于c++ - std::fstream 应该如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16288562/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com