Windows中断了Python长文件名支持

Sop*_*phy 7 python windows python-2.x

我编写Python脚本来复制文件; 不幸的是它因为文件名太长(> 256)而一直失败.无论如何要处理这个问题?

我正在使用Python 2.5.4和Windows XP.

干杯,

Mar*_*wis 9

为了使用\\?\前缀(如已经提出的那样),还需要确保使用Unicode字符串作为文件名,而不是常规(字节)字符串.

  • 另外,我发现(1)只有绝对路径名有效,(2)只有反斜杠有效. (3认同)

小智 5

对于在这里寻找解决方案的其他人:

  1. 您需要\\?\按照前面的说明添加前缀,并确保字符串是unicode;
  2. 如果您使用 Shutil,尤其是像 Shutil.rmtree 和 onerror 方法这样的东西,您也需要修改它以添加前缀,因为它会在途中的某个地方被删除。

你必须写一些类似的东西:

def remove_dir(directory):
    long_directory = '\\\\?\\' + directory
    shutil.rmtree(long_directory, onerror=remove_readonly)

def remove_readonly(func, path, excinfo):
    long_path = path
    if os.sep == '\\' and '\\\\?\\' not in long_path:
        long_path = '\\\\?\\' + long_path
    os.chmod(long_path, stat.S_IWRITE)
    func(long_path)
Run Code Online (Sandbox Code Playgroud)

这是 Python 3.x 的示例,因此所有字符串都是 unicode。