代码之家  ›  专栏  ›  技术社区  ›  kgriffs

在Windows上,何时应使用“\\\?\\”文件名前缀?

  •  12
  • kgriffs  · 技术社区  · 16 年前

    我遇到了一个c库,用于打开给定Unicode文件名的文件。在打开文件之前,它首先通过在“\\?\”前加前缀将文件名转换为路径。除了增加路径中允许的最大字符数之外,是否还有其他理由这样做 this msdn article

    看起来这些“\\?\”路径需要Windows API和标准库的Unicode版本。

    5 回复  |  直到 15 年前
        1
  •  9
  •   xahtep    16 年前

    是的,就是为了这个目的。但是,如果您决定创建超过最大路径长度的路径,则可能会看到兼容性问题。例如,浏览器外壳和命令提示符(至少在XP上,我不知道Vista)无法处理超过该长度的路径,并将返回错误。

        2
  •  5
  •   itsadok    16 年前

    我管理了一个文件服务器,它通常使用 path_length > MAX_PATH H:\myfile.txt ,但在服务器上它实际上是 H:\users\username\myfile.txt . 因此,如果用户创建的文件 MAX_PATH MAX_PATH+len("users\username") .

    (创建带有MAX_PATH字符的文件并不少见,因为当您在Internet Explorer上保存网页时,它会使用页面标题作为文件名,对于某些页面来说,这可能相当长)。

    此外,与Mac或Linux计算机共享驱动器(通过网络或usb),您可以发现自己拥有名称为con、prn或lpt1的文件。同样,前缀允许您和您的脚本处理这些文件。

        3
  •  3
  •   Rob Kennedy    16 年前

    我想首先要注意的是“\\?\”不会使路径成为UNC路径。你第二次称它为UNC时更准确了- 路径但即便如此,相似之处也仅仅来自于一开始有两个反斜杠。这真的与UNC无关。事实证明,你必须使用 字符以获取带有“\\?\”前缀的UNC路径。

    需要注意的一点是,前缀不允许用于相对路径,只允许用于绝对路径。您可能需要再次检查您的C库是否遵守该限制。

        4
  •  3
  •   j_random_hacker    12 年前

    除了允许更长的路径外,“\\?\”前缀还允许您使用文件和目录名,如“con”和“aux”。通常Windows会将这些设备解释为老式的DOS设备。

        5
  •  1
  •   Head Geek    16 年前

    MAX_PATH 这似乎是唯一的原因,据我所知,我和我项目的任何客户都没有这样做过。