知道目录复制何时完成



我有一个在Windows上运行的Python数据分析应用程序。我希望用户能够将包含数据文件的文件夹复制到"收件箱"文件夹中,此时我的应用程序将开始处理数据。我的问题是,当目录复制完成时,Windows 是否提供事件

谢谢

可能有更好的方法可以做到这一点,但您可以通过计算文件夹中的文件数量来开始,然后等到这个数量增加,如下所示:

import glob, os, time
directory = os.path.join('inbox','*') #Uses wildcard so ANY files in the 'inbox' directory are used.
numFiles = len(glob.glob(directory)) #Gets initial number of files
while True:
    numFilesNew = len(glob.glob(directory)) #Gets current number of files
    if numFilesNew > numFiles: #Compare current amount of files to initial 
        break #Exit loop if there's an increase 
    else: time.sleep(1) #Wait if no files were added
files = glob.glob(directory) #Make a list of filenames in the directory
print(files)

对于那些不确定的人,glob.glob 本质上返回给定目录中的文件列表。

这段代码是用 Python 3.4 编写的,但我看不出它在其他版本中不起作用的原因。

如果您只想要某个扩展名的文件,那么您可以换出

directory = os.path.join('inbox','*')

directory = os.path.join('inbox','*.png')

但是,当然要更改".png"以获取所需的任何文件扩展名。当然,这并不是说有问题的文件实际上是这种格式/类型,只是它具有扩展名。

这是我在这个网站上的第一个答案,希望对您有所帮助! :)

我知道

这是一个迟到的回复,但只是想提供更多的想法。

TheCatOfWar给出的答案有一个缺点:该解决方案假设可以在一秒钟内完全复制文件或文件目录,而对于大文件或目录而言,情况并非总是如此。

我在Windows 7上测试了他/她的代码,该目录包含许多文件,总计高达3 GB。脚本在我开始复制这个大目录后不久就停止了,因为在"收件箱"中创建了一个目录,但包含的文件仍在复制中。

无论您在那里睡了多少秒,当 while 循环中断时,保证您有一个完全复制的目录是不安全的。

我认为thebjorn给出的评论是一种更好,更重要的是更安全的方法:如果您可以控制复制发起方,请使用标志文件来指示副本的结束。这也是我现在正在尝试的解决方案。

最新更新