C++,如果文件在读取时移动会发生什么
C++, what happens if file moved while being read?
如果C++正在读取一个文件(比如一个有20000行的csv文件),并且在读取到一半时,另一个进程删除了该文件(比如说它是一个ifstream),它的行为会如何。
我得到了一个seg错误,还是我存储行的向量只有10000行,没有错误表明出了问题?
类似地,若我通过流进行写作,但它被删除而中断,会发生什么?在这种情况下,如果中断进行到一半,我的输出文件是否只包含最后10000行?
它取决于操作系统。
如果您使用的是Unix-y操作系统,您将继续读取/写入数据,因为删除只是对包含目录和/或索引节点的更新,因此不会影响文件的数据。
然而,如果文件数据所在的磁盘块在您读取时可能会被新文件重复使用(同样取决于操作系统),那么一旦您在缓冲区中完成数据处理,基本上就会读取错误文件的数据。
如果你在Windows上,正如Seth Carnegie在评论中正确指出的那样,如果打开文件进行阅读,文件会自动锁定(因此无法删除)。
我想它高度依赖于系统。Linux可能会继续工作,而Windows会让你头疼。
相关文章:
- 当 std::move 与 C 样式数组或不移动对象时会发生什么
- 移动语义和深层/浅层复制之间有什么关系?
- 我什么时候会默认(而不是删除)基类中的复制和移动操作
- 在C++中使用移动语义的正确方法是什么?
- 是什么解释了这个片段中如此多的移动和破坏
- 我什么时候需要移动操作,c++
- 源引擎 - 移动代码:什么是"wishspeed"?
- 使用移动构造函数与传递指针有什么优势?
- 什么是使类不可移动的用例(如果有的话)
- 在 vector 的复制/移动分配下,底层存储会发生什么情况?
- 当我们将数据从 ax 移动到端口地址时会发生什么
- 具有可以引发的移动操作的仅移动类的示例是什么?
- 移动和键比较在 C++ 中是什么意思
- 移动构造函数相对于复制构造函数的优势是什么?复制构造函数使用bool来表示是复制还是移动
- 如果在没有move构造函数的情况下移动对象,会发生什么
- 我可以用什么UI库或其他东西来模拟用C++移动东西的交通状况
- 对于默认定义的移动构造函数,noexcept的规则是什么
- C++,如果文件在读取时移动会发生什么
- 移动basic_iostream时basic_ostream底座会发生什么情况
- 相对于其数据在特定方向上移动的有效方法是什么