我写Python脚本复制文件;不幸的是它不断失败,因为文件名过长(> 256)。反正是有解决这个问题?

我使用Python 2.5.4和Windows XP。

干杯,

有帮助吗?

解决方案

其他提示

为了使用\\?\前缀(如已经提出的),你还需要确保你使用Unicode字符串作为文件名,不正规(字节)的字符串。

您是否尝试过在这种变通办法旧线,进出口。 “魔前缀”把戏?我不知道,如果underyling问题(即我们没有使用正确的出了许多可用的Windows API的文件)曾经得到固定的,但解决方法应该工作...

有关别人找这里的解决方案:

  1. 您需要添加前缀\\?\如前所述,并确保字符串是unicode;
  2. 如果您正在使用shutil,特别是像用onError方法shutil.rmtree,你需要过修改,添加前缀,因为它得到的途中某处剥离。
  3. 您必须写是这样的:

    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)
    

    这是用于Python 3.x的一个例子,因此所有字符串是二进制。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top