想象一下我声明了一个输出文件。
如果我用这段代码打开它两次会发生什么?它还可以工作吗?
ofstream outfile;
outfile.open("record.txt", std::ofstream::app);
outfile.open("record.txt", std::ofstream::app);
根据文档关于std::ofstream::open https://en.cppreference.com/w/cpp/io/basic_ofstream/open,它的行为方式与std::basic_filebuf::open
。根据该函数的文档 https://en.cppreference.com/w/cpp/io/basic_filebuf/open,如果文件已经打开,操作将失败。
这意味着第二次调用std::ofstream::open
将使流处于这样的状态failbit https://en.cppreference.com/w/cpp/io/ios_base/iostate已设置。因此,流上的大多数后续操作都将失败,直到该位被清除。为了清除该位,您必须调用std::ofstream::clear https://en.cppreference.com/w/cpp/io/basic_ios/clear。之后,流将再次正常运行。
上面的答案适用于尝试使用相同的文件打开两个文件std::ofstream
对象,无论是否是同一个文件。
尝试使用两个不同的文件打开同一个文件std::ofstream
对象(您在问题中没有这样做)是一个完全不同的问题。不建议这样做,因为即使操作系统允许多次打开文件,这也可能为每个流对象提供自己的缓冲区,该缓冲区与其他流的缓冲区不同步。这可能会导致文件损坏。但是,如果两个流访问文件中相距很远的完全不同的部分,它可能会起作用(但我仍然不建议冒险)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)