C++,如果文件在读取时移动会发生什么

C++, what happens if file moved while being read?

本文关键字:移动 什么 读取 如果 文件 C++      更新时间:2023-10-16

如果C++正在读取一个文件(比如一个有20000行的csv文件),并且在读取到一半时,另一个进程删除了该文件(比如说它是一个ifstream),它的行为会如何。

我得到了一个seg错误,还是我存储行的向量只有10000行,没有错误表明出了问题?

类似地,若我通过流进行写作,但它被删除而中断,会发生什么?在这种情况下,如果中断进行到一半,我的输出文件是否只包含最后10000行?

它取决于操作系统。

如果您使用的是Unix-y操作系统,您将继续读取/写入数据,因为删除只是对包含目录和/或索引节点的更新,因此不会影响文件的数据。

然而,如果文件数据所在的磁盘块在您读取时可能会被新文件重复使用(同样取决于操作系统),那么一旦您在缓冲区中完成数据处理,基本上就会读取错误文件的数据。

如果你在Windows上,正如Seth Carnegie在评论中正确指出的那样,如果打开文件进行阅读,文件会自动锁定(因此无法删除)。

我想它高度依赖于系统。Linux可能会继续工作,而Windows会让你头疼。