我编写了一个Python脚本以复制文件;不幸的是,由于文件名太长(>256),它一直失败。有没有办法解决这个问题?
我正在使用Python 2.5.4和Windows XP。
谢谢!
我编写了一个Python脚本以复制文件;不幸的是,由于文件名太长(>256),它一直失败。有没有办法解决这个问题?
我正在使用Python 2.5.4和Windows XP。
谢谢!
\\?\
前缀,您还需要确保使用Unicode字符串作为文件名,而不是常规(字节)字符串。如果有其他人在寻找解决方案:
\\?\
,并确保字符串是unicode格式;你需要编写类似以下的内容:
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 的示例,因此所有字符串都是 unicode。
import os
import shutil
def copyfile_long_path(src, dst):
src_abs = os.path.abspath(src)
dst_abs = os.path.abspath(dst)
cwd = os.getcwd()
os.chdir(os.path.dirname(dst))
shutil.copyfile(src_abs, os.path.filename(dst))
os.chdir(cwd)
if not os.path.isfile(dst_abs):
raise Exception("copying file failed")