我有一个在Windows上运行的python脚本只是将目录的内容从一个位置复制到另一个位置但是遇到了以下错误,不知道为什么,我可以确认源文件存在,任何关于什么可能出错的想法这里吗?
File "C:\crmapps\apps\python275-64\lib\shutil.py", line 208, in copytree
raise Error, errors
shutil.Error: [('\\\\WPLBD04\\pkg\\builds\\promote\\2712\\2712_QCA1990ANFC_CNSS.HW_SP.2.0_win_pro\\sumatraservices\\inRexW\\TLM-2009-07-15\\docs\\doxygen\\html\\classtlm__utils_1_1instance__specific__extensions__per__accessor-members.html', '\\\\sun\\sscn_dev_integration\\promote_per_CL_artifacts\\TECH_PRO.CNSS.2.0\\20141013125710_1115240\\2712_QCA1990ANFC_CNSS.HW_SP.2.0_win_pro\\sumatraservices\\inRexW\\TLM-2009-07-15\\docs\\doxygen\\html\\classtlm__utils_1_1instance__specific__extensions__per__accessor-members.html', "[Errno 2] No such file or directory:
答案 0 :(得分:2)
如上所述,您已经超越了win32路径大小限制。事实证明,限制是在win32而不是实际的文件系统驱动程序。解决问题的诀窍是将r"\\?\"
添加到路径中,以便win32将路径传递而不会与它们混淆。它只适用于使用包含驱动器号的绝对名称。
def win32_fix_long_path(path):
return r'\\?\' + os.path.realpath(path)
它可能不适用于所有情况,特别是如果您尝试将名称传递给子流程。
答案 1 :(得分:0)
喜欢 Lukas Graf 说。问题是您的目标路径长度似乎是266个字符,因此exceeds the limit。
目的地路径较长。因此,错误始终位于目标中,因为您的源已存在。假设您的源路径不是扩展长度路径。
source: \\WPLBD04\pkg\builds\promote\2712\
destination: \\sun\sscn_dev_integration\promote_per_CL_artifacts\TECH_PRO.CNSS.2.0\20141013125710_1115240\
您可以尝试使用shorten your filepath win32api来避免此问题。
string = win32api.GetShortPathName(path)
您可以预先\\?\
使用extended-length paths。
>>> open(r"C:\%s\%s" % ("a"*1, "a"*254),"w")
<open file '...', mode 'w' at 0x0000000001F120C0>
>>> open(r"C:\%s\%s" % ("a"*2, "a"*254),"w")
IOError: [Errno 2] No such file or directory: '...'
>>> open(r"C:\%s\%s" % ("a"*1, "a"*255),"w")
IOError: [Errno 2] No such file or directory: '...'
>>> open(r"\\?\C:\%s\%s" % ("a"*1, "a"*255),"w")
<open file '\\\\?\\...', mode 'w' at 0x0000000001F12150>
夸大:我认为使用扩展长度路径对文件访问速度没有任何明显的副作用。如果您只想避免扩展长度路径,请使用长度小于或等于源路径的目标路径。