在c++中使用同一个fstream对象进行读写时,是否有任何导致错误的特性



我正在努力学习C++流,ifstream,of stream。在我的项目进行到一半的时候,我了解到如果我们使用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(),你将无法确定对文件执行操作的顺序。

如果您同时使用一个流进行读写,我认为行为将是可预测的,并且更容易理解。

相关内容

  • 没有找到相关文章

最新更新