【问题标题】:Python 3: win32com object.Size throws exception (pywintypes.com_error)Python 3:win32com object.Size 抛出异常 (pywintypes.com_error)
【发布时间】:2019-02-12 19:43:22
【问题描述】:

我正在使用用户 Augustin 在此处发布的解决方案:very quickly getting total size of folder

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\(user) 或 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 目录大小的方法,所以我希望我仍然可以使用它。

【问题讨论】:

    标签: python python-3.x pywin32 win32com


    【解决方案1】:

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

    C:\Users\Adam\AppData\Local\Microsoft\Windows\INetCache\Content.IE5

    指向

    C:\Users\Adam\AppData\Local\Microsoft\Windows\INetCache\IE

    C:\Users\Adam\AppData\Local\Microsoft\Windows\INetCache\Low\Content.IE5

    指向

    C:\Users\Adam\AppData\Local\Microsoft\Windows\INetCache\Low\IE]

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

    This answer 讨论了这个特定文件的问题。

    This answer 解释了 Size 属性是如何工作的,以及它在遇到没有足够权限的文件夹时为什么会失败。看起来 Size 正在尝试遍历连接点,但由于连接权限而未能这样做。

    此问题的解决方案可能取决于您对包括 AppData 在内的用户配置文件文件夹大小的要求程度。如果您不关心 AppData,那么您可以将所有子目录的大小相加。

    或者,如果您确实需要 AppData 的大小,那么您可以获得所有文件夹(包括 AppData)的大小,对于那些出错的文件夹(可能只是 AppData),您可以遍历层次结构,在可能的情况下对文件夹大小求和,直到您遇到了无法导航到的地方(即路口)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      相关资源
      最近更新 更多