Winapi 如何使用';处理长相对路径\';前缀

Winapi 如何使用';处理长相对路径\';前缀,winapi,Winapi,所以我们都知道Windows程序在默认情况下仅限于处理 最大路径长度为260个字符。但是,通过在路径前面加上\\?\字符序列,可以很容易地克服这个限制 然而,由于某些原因,相对路径不可能做到这一点,正如MSDN所说: 因为不能将\\?\前缀与相对路径一起使用, 相对路径始终限制为总共MAX\u PATH个字符 () 我真的不明白为什么微软决定禁止相对路径的前缀是\\?\,所以如果这个决定背后有某种理由,我真的很高兴听到这个消息,因为\\?\只允许完整路径对我来说没有意义 然而,我真正的问题是如何

所以我们都知道Windows程序在默认情况下仅限于处理 最大路径长度为260个字符。但是,通过在路径前面加上
\\?\
字符序列,可以很容易地克服这个限制

然而,由于某些原因,相对路径不可能做到这一点,正如MSDN所说:

因为不能将
\\?\
前缀与相对路径一起使用, 相对路径始终限制为总共
MAX\u PATH
个字符

()

我真的不明白为什么微软决定禁止相对路径的前缀是
\\?\
,所以如果这个决定背后有某种理由,我真的很高兴听到这个消息,因为
\\?\
只允许完整路径对我来说没有意义


然而,我真正的问题是如何处理这个限制:我是否应该简单地调用相对路径上的
GetFullPathName()
,将它们扩展到完整路径,然后添加
\\?\
前缀,然后将该路径传递给
fopen()
等。,或者,处理此限制的建议方法是什么?

您不能将
\\?\
前缀与相对路径一起使用

当相对路径传递给系统时,它被解析为绝对路径,然后传递给系统。正如在报告中提到的:

前缀
\\:\
不作为路径本身的一部分使用。他们 指示路径应以最小代价传递给系统 修改,这意味着您不能使用前斜杠 表示路径分隔符,或表示当前 目录,或双点表示父目录


相对路径是winapi层从MS Dos和启发MS Dos的早期操作系统(如RSX和Unix)继承的一项“功能”。可怕的引用,这已经造成了大量的错误。内核不支持它。您可以使用该前缀调用内核路径处理,从而避免winapi中内置的MAXPATH限制。是的,您可以通过GetFullPathName扩展路径,然后添加\\?\prefix。当然,将相对路径转换为绝对路径并不困难。@DavidHeffernan:是的,这就是为什么我想知道是否有一个更简单的解决方案,而不需要花费额外的精力,首先调用
GetFullPathName()
,但如果是这样做的话,“这对我来说没问题。”安德烈亚斯——这里是主要问题——从什么开始的相对路径?如果您知道这可以简单地合并2个字符串和\\?\prefixthank以获得额外信息!知道使用“\\?”也意味着不能使用正斜杠和句点/双点,这绝对是件好事。