我正在考虑在Windows应用程序中处理更长的文件路径。

当前,我有一个文本框(编辑框),用户可以在其中输入绝对文件路径。然后,我使用GetWindowText将键入的文件路径读入声明为这样的字符串中:TCHAR FilePath[MAX_PATH];
显然,这里我依赖于MAX_PATH常量,该常量将我限制为260个字符。因此,要处理更长的文件/路径名称,我可以像这样扩展我的TCHAR数组:TCHAR FilePath[32767];

或者,还有更好的方法?我可以使用可变长度数组吗? (TCHAR FilePath[];在C++中甚至可能吗?-抱歉,我对此还很陌生)。

谢谢高级!

这是我上面提到的全部代码片段:

TCHAR FilePath[MAX_PATH];
ZeroMemory(&FilePath, sizeof(FilePath));
GetWindowText(hWndFilePath, FilePath, MAX_PATH);

最佳答案

Windows上的文件路径有很多限制。默认情况下,路径不能超过260个字符,这是MAX_PATH常数的作用。

但是,可以通过在路径前面加上“\\?\”前缀来访问更长的路径(有一定限制)。但是,使用“\\?\”前缀的局限通常会超过其好处:

  • 有许多不支持带有此前缀的路径的Win32 API(例如,在长度超过260个字符的路径上,LoadLibrary始终会失败)
  • 使用“\\?\”前缀时,Win32规范化规则不会生效。例如,默认情况下,路径中的“/”将转换为“\”,“”。和“..”分别转换为对当前目录和父目录的引用,依此类推:当您使用“\\?\”前缀时,这些都不会发生。
  • 因为可以修改程序以支持更长的路径,所以其他程序可能无法打开您创建的文件。如果其他程序也没有使用“\\?\”前缀,就会出现这种情况。

  • 老实说,第2点才是真正的杀手er:使用“\\?\”前缀会给自己带来各种麻烦,如果走那条路,基本上必须自己重新实现Win32规范化规则。

    因此,我的建议是坚持使用260的限制。至少直到更好的平台支持更长的路径为止。

    08-25 00:29