我正在Windows上运行我的python代码并尝试遍历并将所有文件名及其路径存储在文件中。但Windows限制为260个字符。
os.chdir(self.config.Root_Directory_Path())
for root, dirs, files in os.walk("."):
file_list.extend( join(root,f) for f in files )
file_name_sorted = sorted(file_list)
#file_sorted = sorted(file_list, key=getsize)
#time.strftime("%m/%d/%Y %I:%M:%S %p" ,time.localtime(os.path.getmtime(file)))
f = open(self.config.Client_Local_Status(),'wb')
for file_name in file_name_sorted:
if (os.path.exists(file_name)):
#f.write((str(os.path.getmtime(file_name)) + "|" + file_name + "\n").encode('utf-8'))
pass
else:
print(file_name + "|" + str(len(file_name) + len(originalPath)) + "\n")
print(os.path.getmtime(file_name))
#f.write((str(os.path.getmtime(file_name)) + "|" + file_name + "\n").encode('utf-8'))
f.close()
由于该错误,os.path.getmtime(file_name)会抛出未找到的异常文件。我怎样才能克服这个问题?我尝试使用//?/字符作为前缀,如
中所示http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx
但是使用//?/ character没有成功。
我尝试使用os.path.getmtime(“////?//”+ file_name)#Threw错误无效路径
请建议修复
答案 0 :(得分:7)
这里的问题是你使用的是相对路径。 \\?\
前缀只能应用于绝对路径。正如the documentation所说:
这些前缀不会用作路径本身的一部分。它们表明路径应该以最小的修改传递给系统,这意味着您不能使用正斜杠表示路径分隔符,或者表示当前目录的句点,或者表示父目录的双点。由于您不能将“
\\?\
”前缀与相对路径一起使用,因此相对路径始终限制为总共 MAX_PATH 字符。
修复很简单。而不是:
'\\\\?\\' + file_name
这样做:
'\\\\?\\' + os.path.abspath(file_name)
您不能使用正斜杠。添加额外的反斜杠可能是合法的,也可能不合法,在这种情况下,您可以使用r'\\?\\'
而不是将双反斜杠加倍。试一试,看看(但要确保测试像C:\foo
这样的驱动前缀路径和\\server\share\bar
之类的UNC路径......)但是上面的双反斜杠版本肯定会有效。