gpt4 book ai didi

c++ - 在c++中使用相同的fstream对象进行读写时是否存在任何错误诱导特征

转载 作者:行者123 更新时间:2023-11-28 08:07:18 28 4
gpt4 key购买 nike

我正在尝试学习 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com