Windows上的os.path.getsize在复制时报告完整文件大小

Windows上的os.path.getsize在复制时报告完整文件大小,windows,file,python-2.7,os.path,Windows,File,Python 2.7,Os.path,我正在将一个2.23GB(2401129714字节)的大文件从一个位置复制到网络共享上的另一个位置。我使用下面的代码通过检查文件大小来检查文件何时完成复制。我使用的是Windows7Python2.7.11,并且os.path.getsize会报告文件的完整大小一旦文件开始复制,文件就不会增长。有没有其他方法可以判断Python中的文件何时完成复制 copying = True size2 = -1 while copying: size = os.path.getsize('name

我正在将一个2.23GB(2401129714字节)的大文件从一个位置复制到网络共享上的另一个位置。我使用下面的代码通过检查文件大小来检查文件何时完成复制。我使用的是Windows7Python2.7.11,并且
os.path.getsize
会报告文件的完整大小一旦文件开始复制,文件就不会增长。有没有其他方法可以判断Python中的文件何时完成复制

copying = True
size2 = -1
while copying:
    size = os.path.getsize('name of file being copied')
    if size == size2:
        print "File has finished copying"
        break
    else:
        size2 = os.path.getsize('name of file being copied')
        time.sleep(2)
您可以如上所述使用。
有关用法的示例,请参见。

编辑:解决方案-

import os
import time
def main( event, path ):  
 if os.path.exists(path):
   while True:
    try:
        new_path= path + "_"
        os.rename(path,new_path)
        os.rename(new_path,path)
        time.sleep(0.05)
        print("event type: %s path: %s " %(event.event_type, path))
        break
    except OSError:
        time.sleep(0.05)
我利用了一个事实,即没有两个进程可以模拟地利用一个文件进行IO操作。在windows中,复制文件时,操作系统进程会将其保持打开状态。复制完成后,OS进程将关闭该文件,python中的OS模块最终可以成功重命名该文件

@Anmol-不是重复的。在windows中,此代码的问题在于操作系统保留了一个二进制文件,并在复制时对其进行写入,因此os.stat显示的大小不会递增。我们需要一段代码,在图像复制完成时通知我们。此特定代码是一个轮询代码,在linux上运行良好,并在复制过程完成时通知我们(在linux中,大小随时间递增)

输出应该是

Size now 124
Size now 12345
Size now 238590
.....
,而不是仅仅

Size now 23459066950
os.stat()和os,path.getsize()显示最终分配的大小唯一的解决方案是尝试执行代码并使用try-catch块,然后休眠重试

这也可以在Linux上使用,这样您就不用麻烦轮询您刚刚重试的大小。当然,下面的代码应该稍加改进,以确保不会遇到无限循环

       while True:
            try:
                OsAbstract.copy(src, file_metas.get_tmp_full_destination())
                break
            except PermissionError:
                time.sleep(0.5)

os.path.getsize报告文件开始复制时的完整文件大小,文件不会增长。
这意味着什么?os.stat()和os可能重复,path.getsize()显示最终分配的大小唯一的解决方案是尝试执行代码并设置一个try-catch块,然后休眠重试
       while True:
            try:
                OsAbstract.copy(src, file_metas.get_tmp_full_destination())
                break
            except PermissionError:
                time.sleep(0.5)