【发布时间】:2017-08-02 01:25:33
【问题描述】:
遍历下面提到的目录和所有子目录(Windows 8.1)以打印所有文件及其完整路径会返回错误(无效目录)。 在 python 解释器中进行测试时,我得到以下输出:
os.path.isfile("C:\\Miele_Service\\Miele Offline-ETD\\DATA_data.mdf")
给予:
False
还有:
os.path.isdir("C:\\Miele_Service\\Miele Offline-ETD\\DATA_data.mdf")
给予:
False
在我看来,权限存在问题,因为 *.mdf 是一个 sql 数据库文件。
我需要做什么才能通过代码获得必要的权限才能确认它确实是一个文件并将其打印出来?
编辑:
在命令提示符下使用 icacls 函数检查结果:
对于被拒绝访问的文件所在的目录:
> icacls "C:\Miele_Service\Miele Offline-ETD"
C:\Miele_Service\Miele Offline-ETD
Everyone:(OI)(CI)(F)
BUILTIN\Administrators:(I)(OI)(CI)(F)
NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
BUILTIN\Users:(I)(OI)(CI)(RX)
NT AUTHORITY\Authenticated Users:(I)(M)
NT AUTHORITY\Authenticated Users:(I)(OI)(CI)(IO)(M)
Successfully processed 1 files; Failed processing 0 files
对于我得到拒绝访问错误的文件(我必须使用与开篇文章不同的文件,因为我手动更改了原始文件的权限以确认它是读取访问权限问题):
> icacls "C:\Miele_Service\Miele Offline-ETD\DATA_log.ldf"
C:\Miele_Service\Miele Offline-ETD\DATA_log.ldf: Access is denied.
Successfully processed 0 files; Failed processing 1 files
我应该使用什么模块在 Python 中自动修改文件和目录的权限?
编辑 2:
检查提升的命令提示符:
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.
C:\Windows\system32>icacls "C:\Miele_Service\Miele Offline-ETD"
C:\Miele_Service\Miele Offline-ETD
Everyone:(OI)(CI)(F)
BUILTIN\Administrators:(I)(OI)(CI)(F)
NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
BUILTIN\Users:(I)(OI)(CI)(RX)
NT AUTHORITY\Authenticated Users:(I)(M)
NT AUTHORITY\Authenticated Users:(I)(OI)(CI)(IO)(M)
Successfully processed 1 files; Failed processing 0 files
C:\Windows\system32>icacls "C:\Miele_Service\Miele Offline-ETD\DATA_log.ldf"
C:\Miele_Service\Miele Offline-ETD\DATA_log.ldf
TKlucziowski\SQLServerMSSQLUser$TKlucziowski$MIELE_ETD:(F)
OWNER RIGHTS:(F)
BUILTIN\Administrators:(F)
Successfully processed 1 files; Failed processing 0 files
似乎拥有管理员权限的 icacls 能够成功访问该文件...
所以请指点我一个在 Python 中启用权限更改的模块。我是新手,但我知道最好的方法是暂时取消限制(并以某种方式备份它?)并在访问文件后恢复以前的权限。
谢谢。
【问题讨论】:
-
它在尝试打开它时返回访问被拒绝......
-
它在尝试打开它时返回拒绝访问....刚刚更改了它的所有者,我现在可以访问它,所以文件存在,但 python 仍然返回无效目录。 os.listdir(path) 函数是否对名称中包含空格字符的目录有问题?
-
我在windows中访问文件没有问题,windows读取目录没有任何问题...
-
好的,刚刚确认。我必须更改管理员和所有者的权限才能获得对文件的完全访问权限(仅在为管理员更改后仍然显示访问被拒绝。之后 python 函数 isfile 返回 True 但现在同一目录中的其他一些文件有类似的启用保护并导致相同的问题(无效的目录。假设我有一个目录充满了像这样受保护的文件,我不想在 Windows 中手动编辑所有文件权限,请问哪个模块在 python 中启用了该功能?
-
该文件已经设置了明确的权限(而不是继承的权限),可能是由数据库软件设置的,可能是有原因的。更改权限然后再次更改它们不是一个好的解决方案。您的程序不应该与另一个程序的文件混淆。无论如何它都行不通;如果您没有运行提升权限,您将无权更改权限,如果您正在运行提升权限,则您将不会需要更改权限。要么以某种方式列出父目录的内容,要么以提升的权限运行程序。
标签: python windows file-permissions