如果 C++ 正在读取一个文件(比如一个 20,000 行的 csv 文件)并且在读取的中途,另一个进程删除了该文件(假设它是一个 ifstream),它的行为如何。
我是否遇到了段错误,或者我存储行的向量是否只有 10,000 行并且没有错误表明出现问题?
同样,如果我正在通过 ofstream 写入并且它被删除中断,会发生什么?在这种情况下,如果中断进行到一半,我的输出文件是否只包含最后 10,000 行?
如果 C++ 正在读取一个文件(比如一个 20,000 行的 csv 文件)并且在读取的中途,另一个进程删除了该文件(假设它是一个 ifstream),它的行为如何。
我是否遇到了段错误,或者我存储行的向量是否只有 10,000 行并且没有错误表明出现问题?
同样,如果我正在通过 ofstream 写入并且它被删除中断,会发生什么?在这种情况下,如果中断进行到一半,我的输出文件是否只包含最后 10,000 行?
这取决于操作系统。
如果您使用的是 Unix-y 操作系统,您将继续读取/写入数据,因为删除只是对包含目录和/或 inode 的更新,因此您不会影响文件的数据。
但是,如果文件数据所在的磁盘块可以在您读取时被较新的文件重新使用(再次取决于操作系统),那么一旦您完成缓冲区中的数据,您基本上会读取错误的文件数据。
如果您在 Windows 上,正如 Seth Carnegie 在评论中正确指出的那样,如果打开文件以供阅读,文件会自动被锁定(因此无法删除)。
我猜它高度依赖系统。因为 Linux 可能会继续工作,而 Windows 让您有些头疼。