我正在尝试自动执行下载过程。在此我想知道,特定文件的保存是否已完成。场景就是这样。
由于我无法控制浏览器保存功能,因此我不知道保存是否已完成。
我想到的一个想法是使用while循环获取文件的md5sum,并检查前一个计算,并继续while循环,直到前一个和当前一个的md5总和匹配。这似乎不起作用,因为似乎浏览器首先尝试将文件保存在tmp文件中,然后将内容复制到指定的文件(或只是重命名文件)。
有什么想法吗?我使用python进行自动化,因此欢迎使用python实现的任何想法。
由于 Indrajith
答案 0 :(得分:6)
在Windows上,您可以尝试以独占访问模式打开文件,以检查其他程序是否正在使用(读取或写入)。我已经用它来等待服务器端的完整FTP上传,这里是代码:
def check_file_ready(self, path):
'''Check if file is not opened by another process.'''
handle = None
try:
handle = win32file.CreateFile(
path,
win32file.GENERIC_WRITE,
0,
None,
win32file.OPEN_EXISTING,
win32file.FILE_ATTRIBUTE_NORMAL,
None)
return True
except pywintypes.error, e:
if e[0] == winerror.ERROR_SHARING_VIOLATION:
# Note: other possible error codes include
# winerror.ERROR_FILE_NOT_FOUND
# winerror.ERROR_PATH_NOT_FOUND
# winerror.ERROR_ACCESS_DENIED.
return False
raise
finally:
if handle:
win32file.CloseHandle(handle)
注意:此功能会重新引发除共享冲突之外的所有win32错误。您应该先检查文件是否存在,或检查函数中的其他错误代码(请参阅第15行的注释)。