我正在努力学习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(),你将无法确定对文件执行操作的顺序。
如果您同时使用一个流进行读写,我认为行为将是可预测的,并且更容易理解。