gpt4 book ai didi

windows - python win32com FileSystemObject 获取大文件夹失败

转载 作者:可可西里 更新时间:2023-11-01 11:56:04 24 4
gpt4 key购买 nike

我的测试代码是:

#!/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大小。

这里真正的问题是什么,如何解决?

最佳答案

这既不是目录大小问题,也不是 32/64 位问题。它甚至不是 python2 或 python3 的问题。

您的错误转化为“不允许访问!”

最简单的测试方法是创建一个目录,其中只允许所有者读取,而所有其他人根本没有权限。然后将这个目录作为输入——你会得到同样的错误,即使目录是空的。一个很好的例子是本地“c:\system Volume Information”。

再深入一点:python 给出的错误代码是有符号的,而对于合理的查找,Microsoft 描述并期望它们是无符号的。感谢 EB 在 this thread和蒂姆彼得斯在 this thread ,使用示例,您将获得合理的错误代码。

import win32com.client
import pywintypes

def get_folder_size(target_folder):
fso = win32com.client.Dispatch("Scripting.FileSystemObject")
fobj = fso.GetFolder(target_folder)
return fobj.size


if __name__ == '__main__':
try:
get_folder_size('c:/system volume information')
except pywintypes.com_error, e:
print e # debug, have to see which indices
print hex(e[0]+2**32), hex(e[2][5]+2**32)

现在搜索两个十六进制数字,第二个应该会导致很多“你不被允许...”的查询和答案。

关于windows - python win32com FileSystemObject 获取大文件夹失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16514014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com