如何在复制文件之前确保文件已完成?



应用程序 A(不受我的控制)将文件写入目录。 写入文件后,我想用我的 python 脚本将其备份到其他地方。

问题:如何确定文件已完成,或者应用程序 A 仍在写入文件,以便我应等到其完成?我担心我可以复制部分文件....

我想shutil.copyfile(src,dst)使用此功能,但我不知道它是否安全,或者我应该检查文件以其他方式复制。

一般来说,你不能

因为您没有解决问题所需的信息。

如果您必须知道文件已完全传输/创建/写入/任何成功,则创建者必须以某种方式向您发送信号,因为只有创建者拥有该信息。 从接收方,通常无法推断文件已完全传输。 你可以试着猜测,但仅此而已。 例如,您通常无法从连接丢失的位置分辨出完整的转移。

因此,您需要来自发送方的某种信号。

一种常见的方法是使用重命名操作,从filename.xfrfilename,或从"工作中"目录重命名为您正在观看的目录。 由于大多数操作系统以原子方式实现此类重命名操作,因此如果发送方仅在传输成功完成时才执行重命名,则只会处理已成功传输的完整文件。

另一个常见的信号是发送"done"标志文件,例如在成功发送filename后发送filename.done

由于您无法控制发件人,因此无法通过监视文件来可靠地解决此问题。

相关内容

最新更新