无法通过 Python 的 shutil 复制文件

Cannot copy file via Python's shutil

我正在尝试通过 Python 的 shutil 复制文件。从 Python 解释器,从 Powershell 启动,执行:

>>> shutil.copy("C:\Program Files\1C\AgentQMC\1.0.10.2\file.lock", "C:\file.lock")

file.lock 是一个由服务创建的文件,当前为 运行 )但它给了我一个错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Development\Python\Python36\lib\shutil.py", line 257, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "C:\Development\Python\Python36\lib\shutil.py", line 122, in copyfile
    copyfileobj(fsrc, fdst)
  File "C:\Development\Python\Python36\lib\shutil.py", line 79, in copyfileobj
    buf = fsrc.read(length)
PermissionError: [Errno 13] Permission denied

我确定我拥有所有必要的权限,因为如果我退出 Python 解释器并尝试通过 Powershell 复制文件,它会起作用。

谜团解开了。查看程序的源代码(创建此文件)后,我发现该程序在第 101 个字节上设置了独占锁(idk 为什么),而文件的实际长度更少(4-5 个字节,取决于 PID 值)。当我尝试通过 Powershell 复制此文件时,它 ReadFile 前 4 个字节(实际文件长度),将它们写入目标文件并成功完成复制,因为它永远不会到达锁定区域(第 101 个字节)。 Python 出于某种原因忽略值,我将其传递给 .read() 方法并读取至少 8192 字节(我假设这是某个系统常量)(但如果我传递值 x 超过8192,它正好读取 x 个字节)。当 Python 试图从该文件读取 8192 字节时,它显然到达锁定区域并失败。

我也遇到过这个错误。 经过一些测试,似乎是 onedrive 创建了该文件并且不允许脚本访问。 这是一个具体的问题,但我想我会分享,因为这是要记住的事情!