【发布时间】:2013-04-23 16:54:34
【问题描述】:
我刚开始想知道 - 实际上std::fstream 是如何打开的,std::ios::in 和 std::ios::out 实际上应该工作?它应该怎么做?写一些东西到(例如)一个空文件,然后读......什么?只是写值?文件“指针”/“光标”在哪里?也许答案已经存在,但我就是找不到。
【问题讨论】:
我刚开始想知道 - 实际上std::fstream 是如何打开的,std::ios::in 和 std::ios::out 实际上应该工作?它应该怎么做?写一些东西到(例如)一个空文件,然后读......什么?只是写值?文件“指针”/“光标”在哪里?也许答案已经存在,但我就是找不到。
【问题讨论】:
std::fstream 是什么?std::fstream 是一个双向文件流类。也就是说,它为文件的输入和输出提供了一个接口。当用户需要读取和写入相同的外部序列时,通常使用它。
在实例化双向文件流时(与 std::ofstream 或 std::ifstream 不同),默认情况下会指定打开模式 ios_base::in 和 ios_base::out。。这意味着:
std::fstream f("test.txt", std::ios_base::in | std::ios_base::out);
与
相同std::fstream f("test.txt");
如果他们还需要添加一些非默认打开模式,例如trunc、ate、app 或binary,则可以指定这两个选项。如果您打算创建一个用于双向 I/O 的新文件,则需要 ios_base::trunc 打开模式,因为 ios_base::in 打开模式会禁用新文件的创建。
双向 I/O 是对输入和输出的双向流的利用。在 IOStreams 中,标准流将其字符序列保存在缓冲区中,用作数据的源或接收器。对于输出流,有一个“放置”区域(保存输出字符的缓冲区)。同样,对于输入流,也有“获取”区域。
在std::fstream(输入和输出的类)的情况下,它拥有一个联合文件缓冲区,分别代表get和put区域。标记文件中当前位置的位置指示器受输入 和 输出操作的影响。因此,为了在双向流上正确执行 I/O,您必须遵循某些规则:
这仅指std::fstream。 std::stringstream 不需要上述规则。
我希望这些回答您的问题。如果你还有什么,可以在 cmets 中询问。
【讨论】: