我的 Python 程序在"C:Program Files"中符号链接文件时如何避免"PermissionError: [WinError 5] Access is denied"



我的C盘空间快用完了,一个256GB的SSD。

我开始寻找一种方法来移动"C:Program files "C:Program Files (x86)"到另一个磁盘。在google上搜索了很久之后,我决定编写自己的Python程序,将这些文件从这些目录复制到目标驱动器,并在原始位置留下符号链接。由于文件在技术上不会移动,Windows不应该关心。

经过测试,我开始尝试从"C:Program files (x86)"中移动文件。我把几个子目录移到了更宽敞的驱动器上,似乎没有什么问题。甚至WinMerge也说移动的目录和原来的目录是一样的,这应该意味着符号链接是有效的。

注意事项:

  • Python程序在我的帐户下运行,从cmd.exe "作为管理员">
  • 计算机已被置于安全模式,以避免在移动可能正在运行的程序时出现问题。
  • 我的用户帐户具有管理员权限。
  • 受控文件夹访问在设置/病毒&amp中已关闭;威胁保护。

尽管有这些预防措施,当尝试从(x86)移动另一个目录时,Calibre2,我收到10个类似以下错误:

Traceback (most recent call last):
File "C:Users...symmer.py", line 254, in _mv
os.remove(ps)
PermissionError: [WinError 5] Access is denied: 'C:\Program Files (x86)\Calibre2\app\bin\api-ms-win-core-console-l1-1-0.dll'

错误不全是。dll。.dll文件、.xml文件、.pak文件和exe文件共有7个错误。但是它们都是[WinError 5].

相关Python 3.10.2代码很简单:

# Copy source file to destination if not there.
if not Path(dpath).exists():
shutil.copyfile(ps, dpath)
# Delete source file from its directory.
os.remove(ps)
# Create a symlink in the source file's directory to dpath.
# Program needs to run "as admin" on Windows.
os.symlink(dpath, ps)

所以remove()失败是因为Windows拒绝访问。考虑到上面的预防措施,我不明白这是怎么可能的。我必须直接从管理员帐户运行程序以避免错误吗?这将是一个问题,因为我很确定我在安装Windows时从未给该帐户设置密码。

有些程序甚至可以在安全模式下运行。您可以尝试找到任何可能正在使用这些文件的服务并阻止它们,但这可能还不够。就像你说的,问题是删除,所以我建议复制而不是删除。然后,您可以创建一个可启动的Windows USB驱动器并从该驱动器启动,以完成删除并创建符号链接。(您可能可以使用Linux USB驱动器,但其中一些默认情况下不支持NTFS)

相关内容

  • 没有找到相关文章

最新更新