文件复制完成?

0 投票
2 回答
1084 浏览
提问于 2025-04-15 23:39

在Linux系统中,我们怎么知道一个文件在被复制完成之前,能不能去读取它呢?在Windows系统里,如果文件还没复制好,就会出现一个错误提示。

2 个回答

1

在Linux系统中,你可以在一个程序正在写文件的时候打开这个文件,而Python不会报错。所以,通常情况下,你无法确定另一个程序是否已经完成了对这个文件的写入。不过,你可以尝试一些小技巧:

  1. 你可以定期检查文件的大小,看看自上次检查以来文件大小是否增加。如果在比如说五秒钟内文件大小没有变化,你可能可以认为写入已经完成。我说可能是因为这并不是在所有情况下都成立。如果正在写文件的程序因为某种原因被阻塞了,它可能会暂时停止写入,然后再继续写入。所以这个方法并不是百分之百可靠,但如果系统没有过载,这个方法在本地文件复制时可能会有效。

  2. 你可以使用fuser这个命令(这是一个命令行工具),它会列出所有正在使用某个文件的进程ID。如果这个列表中有你自己的进程以外的其他进程,你可以认为复制过程还没有完成。不过,你需要确保目标系统上安装了fuser,这样才能使用这个命令。

1

你可以使用 inotify 这个机制(通过 pyinotify)来捕捉一些事件,比如创建文件、写入文件和关闭文件。根据这些事件,你可以判断文件的复制是否完成。

不过,因为你没有提供具体的信息说明你想做什么,所以我不能确定 inotify 是否适合你(顺便提一下,inotify 只适用于 Linux 系统,所以在 Windows 或其他平台上是无法使用的)。

撰写回答