Python的长文件名支持在Windows破
-
21-09-2019 - |
题
我写Python脚本复制文件;不幸的是它不断失败,因为文件名过长(> 256)。反正是有解决这个问题?
我使用Python 2.5.4和Windows XP。
干杯,
解决方案
其他提示
为了使用\\?\
前缀(如已经提出的),你还需要确保你使用Unicode字符串作为文件名,不正规(字节)的字符串。
您是否尝试过在这种变通办法旧线,进出口。 “魔前缀”把戏?我不知道,如果underyling问题(即我们没有使用正确的出了许多可用的Windows API的文件)曾经得到固定的,但解决方法应该工作...
有关别人找这里的解决方案:
- 您需要添加前缀
\\?\
如前所述,并确保字符串是unicode; - 如果您正在使用shutil,特别是像用onError方法shutil.rmtree,你需要过修改,添加前缀,因为它得到的途中某处剥离。 醇>
您必须写是这样的:
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的一个例子,因此所有字符串是二进制。
不隶属于 StackOverflow