我正在尝试学习 C++ fstream、ifstream、ofstream。在我的项目进行到一半时,我了解到如果我们使用 ofstream 和 ifstream 访问同一个文件进行读写,最好在使用另一个流之前关闭流。
喜欢 ofstream write_stream(...); ifstream read_stream(....);
// Accessing pointers using both read_stream, write_stream interchangebly
read_stream.read(....);
write_stream.write(....);
read_stream.close();
write_stream.close();
///
在上面的例子中,我猜这两个流在文件中使用了相同的指针,所以我需要知道指针的移动,所以我每次尝试读取()或写入( ).
到目前为止,我想我是对的。
为了避免更多的困惑,我决定使用这种格式
fstream read_write_stream("File.bin",ios::in|ios::out|ios::binary);
read_write_stream.seekp(pos);
read_write_stream.seekg(pos);
read_write_stream.tellp();
read_write_stream.tellg()
read_write_stream.read(...);
read_write_stream.write(...);
read_write_stream.close()
在上面的程序中是否有任何我应该注意的错误诱导功能???请指教
最佳答案
虽然我不知道标准是否明确提到这种情况,但我不认为 C++ 编译器可以向您保证在您使用多个流更改相同的外部资源(文件在这个案例)。除了 fstream 内部实现之外,它还取决于操作系统和您写入的硬件。如果我是正确的,默认情况下,它会使此操作成为未定义的行为。
如果你使用两个不同的流,很可能每个流都会管理自己的 put 和 get 指针,每个流都有缓冲,这意味着如果你不使用 flush(),你将无法确定什么是命令操作将在文件上完成。
如果您使用一个流来同时读取和写入,我认为该行为将是可预测的并且更容易理解。
关于c++ - 在c++中使用相同的fstream对象进行读写时是否存在任何错误诱导特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10051615/