3

如果 C++ 正在读取一个文件(比如一个 20,000 行的 csv 文件)并且在读取的中途,另一个进程删除了该文件(假设它是一个 ifstream),它的行为如何。

我是否遇到了段错误,或者我存储行的向量是否只有 10,000 行并且没有错误表明出现问题?

同样,如果我正在通过 ofstream 写入并且它被删除中断,会发生什么?在这种情况下,如果中断进行到一半,我的输出文件是否只包含最后 10,000 行?

4

2 回答 2

3

这取决于操作系统。

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

但是,如果文件数据所在的磁盘块可以在您读取时被较新的文件重新使用(再次取决于操作系统),那么一旦您完成缓冲区中的数据,您基本上会读取错误的文件数据。

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

于 2012-07-17T20:59:13.263 回答
-1

我猜它高度依赖系统。因为 Linux 可能会继续工作,而 Windows 让您有些头疼。

于 2012-07-17T20:58:37.880 回答