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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何确保文件在复制前完成?相关的知识,希望对你有一定的参考价值。

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

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

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

答案

一般来说,你不能。

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

如果您必须知道文件已完全传输/创建/写入/成功,则创建者必须以某种方式向您发送信号,因为只有创建者才具有该信息。从接收方来看,通常无法推断文件已完全传输。你可以尝试猜测,但就是这样。例如,您通常无法从连接丢失的地方告知完整转移。

所以你需要发件人的某种信号。

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

另一个常见的信号是发送一个“完成”标志文件,例如一旦成功发送filename.done就发送filename

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

以上是关于如何确保文件在复制前完成?的主要内容,如果未能解决你的问题,请参考以下文章

如何将值从一个活动中的片段传递到另一个活动? [复制]

如何在编译前访问所有文件? [复制]

这两个代码片段之间有区别吗?如果有,那又如何? [复制]

如何确保脚本由特定版本的 python 执行? [复制]

如何确保 D3 在 javascript 运行之前完成加载多个 CSV?

如何直接从磁盘复制锁定的文件并确保文件完好无损?