我的测试代码是:
#!/usr/bin/env python
import win32com.client
def GetFolderSizeQuick(target_folder):
fso = win32com.client.Dispatch("Scripting.FileSystemObject")
fobj = fso.GetFolder(target_folder)
return fobj.size
print(GetFolderSizeQuick("d:/pytools"))
print(GetFolderSizeQuick("d:/cygwin"))
结果是:
D:\>python a.py
160659697
Traceback (most recent call last):
File "a.py", line 10, in <module>
print(GetFolderSizeQuick("d:/cygwin"))
File "a.py", line 7, in GetFolderSizeQuick
return fobj.size
File "D:\Applications\Python33\lib\site-packages\win32com\client\dynamic.py",
line 511, in __getattr__
ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1)
pywintypes.com_error: (-2147352567, '发生意外。', (0, None, None, None, 0, -2146828218), None)
d:/pytools 文件夹上的第一次调用 GetFolderSizeQuick 有效。大约 153MB。但是第二次调用失败了。文件夹 d:/cygwin 大约为 12.6GB。
我正在使用 python3.3.0 32 位版本在 Windows 7 上工作。所以我认为问题发生在 32 位或 64 位存储结果。32bit int 无法存储 12.6GB 大小。
这里真正的问题是什么,以及如何解决它?