首页 > 解决方案 > 如果我打开一个已经在 C++ 中打开的文件会发生什么

问题描述

想象一下,我声明了一个输出文件。

如果我用这段代码打开它两次会发生什么?它还会起作用吗?

ofstream outfile;
outfile.open("record.txt", std::ofstream::app);
outfile.open("record.txt", std::ofstream::app);

标签: c++filefstream

解决方案


根据 上的文档std::ofstream::open,它的行为方式与std::basic_filebuf::open. 根据有关该功能的文档,如果文件已打开,则操作将失败。

这意味着第二次调用std::ofstream::open将使流处于设置的状态failbit。结果,流上的大多数后续操作将失败,直到该位被清除。为了清除该位,您必须调用std::ofstream::clear. 之后,流将再次正常运行。

上面的答案适用于尝试使用同一个std::ofstream对象打开两个文件,无论它是否是同一个文件。

尝试使用两个不同的std::ofstream对象(您在问题中没有这样做)打开同一个文件是一个完全不同的问题。不建议这样做,因为即使操作系统允许多次打开一个文件,这也可能会为每个流对象提供自己的缓冲区,该缓冲区与其他流的缓冲区不同步。这可能会导致文件损坏。但是,如果两个流都访问文件中相距很远的完全不同的部分,它可能会起作用(但我仍然不建议冒险)。


推荐阅读