我编写 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。
您是否尝试过这个旧线程中建议的解决方法,exp。“魔术前缀”技巧?我不知道底层问题(我们没有在许多可用的 Windows API 中使用正确的文件)是否得到修复,但解决方法应该有效......
对我有用的另一件事是将目录更改为我要复制到的位置:
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")