繁体   English   中英

Python 3:win32com object.Size抛出异常(pywintypes.com_error)

[英]Python 3: win32com object.Size throws exception (pywintypes.com_error)

我正在使用用户Augustin在这里发布的解决方案: 很快得到文件夹的总大小

folderPath = r"C:\Users\e46ldc\Documents"
fso = com.Dispatch("Scripting.FileSystemObject")
folder = fso.GetFolder(folderPath)

MB = 1024 * 1024.0
print("%.2f MB" % (folder.Size / MB))

发生的异常如下所示,仅发生在顶级C:\\ Users \\(用户)或Documents上。 我可以在文件夹中进一步向下运行(即下载或文档中的文件夹):

Traceback (most recent call last):
  File "C:\Users\e46ldc\AppData\Local\Programs\Python\Python37-32\win32dirinfo.py", line 14, in <module>
    print("%.2f MB" % (folder.Size / MB))
  File "C:\Users\e46ldc\AppData\Local\Programs\Python\Python37-32\lib\site-packages\win32com\client\dynamic.py", line 516, in __getattr__
    ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2146828218), None)

经过大量挖掘,似乎这是一个权限错误。 但是,即使以管理员身份运行脚本,我仍然会遇到它。 我已经验证它正确找到了文件夹,我可以使用os.walk()或scandir等其他方法访问该文件夹。

有没有办法解决? 这个方法是我在Windows上测试获得目录大小的最快速度,所以我希望我仍然可以使用它。

通过在我的机器上进行试验,这似乎与两个交接点的权限相关联:

C:\\ Users \\用户亚当\\应用程序数据\\本地\\微软\\的Windows \\ INetCache \\ Content.IE5

哪个指向

C:\\ Users \\用户亚当\\应用程序数据\\本地\\微软\\的Windows \\ INetCache \\ IE

C:\\ Users \\用户亚当\\应用程序数据\\本地\\微软\\的Windows \\ INetCache \\低压\\ Content.IE5

哪个指向

C:\\ Users \\用户亚当\\应用程序数据\\本地\\微软\\的Windows \\ INetCache \\低压\\ IE]

奇怪的是,这两个目的地都是可访问的,因此它是交叉点的访问权限,而不是它们的目的地。

这个答案讨论了这个特定文件的问题。

此答案解释了Size属性如何工作以及遇到没有足够权限的文件夹时失败的原因。 看起来Size正在尝试遍历连接点,并且由于连接权限而无法执行此操作。

此问题的解决方案可能取决于您需要包含AppData的用户配置文件文件夹大小的程度。 如果您不关心AppData,那么您可以只计算所有子目录的大小。

或者,如果您确实需要AppData的大小,那么您可以获得所有文件夹(包括AppData)的大小,对于那些错误的大小(可能只是AppData),您可以遍历层次结构,在可能的情况下总结文件夹大小,直到您遇到某些内容您无法导航(即交叉点)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM