如何避免“WindowsError:[错误5]访问被拒绝”

时间:2016-06-15 08:41:45

标签: python python-2.7 windowserror

有重新创建文件夹的脚本:

# Remove folder (if exists) with all files
if os.path.isdir(str(os.path.realpath('..') + "\\my_folder")):
        shutil.rmtree(os.path.realpath('..') + "\\my_folder", ignore_errors=True)
# Create new folder
os.mkdir(os.path.realpath('..') + "\\my_folder")

这几乎总是有效,但在某些情况下(在创建步骤中)我得到了

WindowsError: [Error 5] Access is denied: 'C:\\Path\\To\\my_folder'

什么可能导致此错误,我该如何避免?

7 个答案:

答案 0 :(得分:7)

权限可能是问题,但我遇到了同样的问题' [错误5]访问被拒绝'在os.rename()上,一个简单的重试循环能够在重试几次后重命名该文件。

for retry in range(100):
    try:
        os.rename(src_name,dest_name)
        break
    except:
        print "rename failed, retrying..."

答案 1 :(得分:6)

什么可能导致此错误?

您根本无权访问您正在为当前正在运行的进程(python.exe)编写的文件夹,甚至可能无法访问该用户。除非您的用户是管理员,否则可能存在您没有写入权限的目录。

我该如何避免?

通常,为了避免这种异常,可以使用tryexcept块,在这种情况下,它将是IOError。因此,如果您只是想忽略拒绝访问并继续使用脚本,您可以尝试:

try:
    # Remove folder (if exists) with all files
    if os.path.isdir(str(os.path.realpath('..') + "\\my_folder")):
        shutil.rmtree(os.path.realpath('..') + "\\my_folder", ignore_errors=True)
    # Create new folder
    os.mkdir(os.path.realpath('..') + "\\my_folder")
except IOError:
    print("Error upon either deleting or creating the directory or files.")
else:
    print("Actions if file access was succesfull")
finally:
    print("This will be executed even if an exception of IOError was encountered")

如果你真的没想到这个错误而且不应该发生这种情况,你必须更改文件的权限。 根据您的用户权限,您可以采取各种步骤。

  • 可以管理员身份执行程序的用户: 选项A

    1. 右键点击cmd.exe
    2. 点击以管理员身份运行
    3. 通过cd转到您的脚本位置,因为它将在C:\Windows\system32处打开,除非您编辑了某些参数。
    4. 运行您的脚本> python myscript.py
  • 可以以管理员身份执行程序的用户: 选项B

    1. 打开文件资源管理器。
    2. 转到您要写入的文件夹或文件夹。
    3. 右键单击它。
    4. 选择属性。
    5. 在属性窗口中,选择安全性选项卡。
    6. 根据需要单击编辑并进行编辑,或者需要授予对程序或用户的访问权。
  • 没有管理员权限的用户:

    1. 这可能意味着它不是您的电脑。
    2. 如果在Uni或工作时检查PC帮助台,或者询问您的老师是否在学校。
    3. 如果您在家并且您的计算机意味着您已使用非管理员用户登录。您创建的第一个通常是默认情况下。如果是,请检查“控制面板”中的用户设置。
    4. 从那以后,其余的几乎是一样的。

答案 2 :(得分:5)

请参阅RemoveDirectory文档; " RemoveDirectory函数在关闭时标记要删除的目录。因此,在关闭目录的最后一个句柄之前,不会删除该目录。"

这意味着,如果某些内容设法创建了您删除的目录的句柄(在创建和删除之间),那么该目录实际上并未被删除,并且您的访问权限已被拒绝,

要解决此问题,请在删除之前重命名要删除的目录。

所以

while True:
  mkdir('folder 1')
  rmdir('folder 1')

可能会失败,解决;

while True:
  mkdir('folder 1')
  new_name = str(uuid4())
  rename('folder 1', new_name)
  rmdir(new_name)

答案 3 :(得分:1)

这是因为您没有检查是否有权打开该路径。您需要更改这些文件夹的权限。

答案 4 :(得分:1)

创建python脚本文件。在这种情况下,您可以将其复制到C:\ WINDOWS \ system32中。脚本文件正在创建名为“Smaog”的文件夹

import os
os.chdir('C:/Program Files')
os.makedirs('Smaog')

在您喜欢的任何文件夹中创建批处理文件。

echo off
title Renaming Folder
python sample.py
pause

保存批处理文件。要运行它,请右键单击并选择以管理员身份运行

如果你不想把你的python脚本放在C:\ WINDOWS \ system32中,你可以选择这样做。 在批处理文件中,指明python脚本文件所在的文件夹/目录。

echo off
title Renaming Folder
cd c:\Users\Smaog\Desktop
python sample.py
pause

然后按照上面的说明以管理员身份运行它。

答案 5 :(得分:0)

我在将Py2切换到Py3之后昨晚遇到了这个问题,并意识到我正在为所有用户安装它。这意味着您将其安装到 Program Files 目录中,而不是%AppData%。大多数以管理员身份运行解决了这个问题,就像你上面的一些人所说,但我使用的是VSCode,有时甚至是PyCharm,并喜欢在其中使用终端。即使您尝试以管理员身份运行这些程序,在尝试专注于您可爱的代码时也会有很多烦人的事情。

我的解决方案:
1)完全卸载(包括 Py Launcher
2)然后使用自定义安装使用提供的安装程序但是......
3)不要选择安装所有用户选项。

我认为,如果没有任何“[错误5]”行在您的命令提示符下,这将使您的日子更加轻松,因为它对我有用。

答案 6 :(得分:0)

对我来说,它是这样工作的:

while os.path.isdir (your_path):
    shutil.rmtree (your_path, ignore_errors=True)
os.makedirs (your_path)