WindowsError:[错误3]系统找不到指定的路径(当路径太长?)

时间:2017-07-11 18:13:50

标签: python-2.7

WindowsError:[错误3]系统找不到指定的路径(当路径太长时?)

我正在创建一个脚本来查找两个目录之间的唯一文件。为了做到这一点,我使用os.walk()来遍历文件,如果存在相同大小的文件,我将它们哈希以确保它们是相同的(在此过程中打开文件)。问题是某些文件在打开时会产生上述错误。人们遇到此问题的最常见原因是因为路径未正确连接,从而导致脚本尝试打开不存在的文件。对我来说情况并非如此。

尝试不同的目录组合后,我开始注意到一种模式,即产生错误的文件似乎具有深层目录结构和长文件名。我想不出这个问题的任何其他原因 - 没有字符编码错误(我将所有路径解码为UTF-8),并且路径确实存在os.walk()

我的行走代码:

for root, dirs, files in os.walk(directory):
    for filename in files:
        file_path = os.path.join(root, filename)

我的哈希码:

def hash(file_path):
    with open(dir_file, 'rb') as f:
        hasher = hashlib.md5()
        while True:
            buf = f.read(byte_size)
            if buf != '':
                hasher.update(buf)
            else:
                break
        result = hasher.hexdigest()
    return result

编辑:问题出现的最新路径是5个目录深(包含142个字符,占双反斜杠),文件名是另外122个字符长

1 个答案:

答案 0 :(得分:1)

这是由于MSDN上解释的Windows API文件路径大小限制:

  

在Windows API中(以下段落中讨论了一些例外),路径的最大长度为MAX_PATH,,定义为260个字符。本地路径按以下顺序构成:驱动器号,冒号,反斜杠,由反斜杠分隔的名称组件以及终止空字符。例如,驱动器D上的最大路径是“D:\某个256个字符的路径字符串”,其中“”表示当前系统代码页的不可见的终止空字符。 (字符<>在此处用于视觉清晰度,不能是有效路径字符串的一部分。)

正如在该页面上所解释的那样,较新版本的Windows支持用于Unicode路径等的扩展文件路径前缀(\\?\),但这不是一致或保证的行为,即它并不意味着它将起作用在所有情况下。

无论哪种方式,尝试使用扩展路径前缀添加路径,看看它是否适合您的情况:

file_path = "\\\\?\\" + os.path.join(root, filename)