0

我正在尝试学习 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();

///

在上述情况下,我猜两个流在文件中使用相同的指针,所以我需要注意指针的移动,所以我每次尝试 read() 或 write() 时都必须寻找。

我想,我是对的,到目前为止。

为了避免更多的混乱,我决定使用这种格式

 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()

在上面的程序中是否有任何引起错误的功能,我应该注意???请指教

4

1 回答 1

1

虽然我不知道标准是否明确提到这种情况,但我认为 C++ 编译器不能向您保证在您使用多个流来更改相同的外部资源(在这种情况下为文件)的情况下会发生什么. 除了 fstream 内部实现之外,它还取决于操作系统和您正在写入的硬件。如果我是正确的,默认情况下,它会使这个操作成为未定义的行为。

如果您使用两个不同的流,很可能每个流都会管理自己的 put 和 get 指针,每个流都有缓冲,这意味着如果您不使用 flush(),您将无法确定操作的顺序将在文件上完成。

如果您使用一个流来读取和写入,我认为该行为将是可预测的并且更容易理解。

于 2012-04-07T07:45:39.333 回答