我正在考虑在我的 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
常数为.
然而,你can通过在路径前加上“\\?\”前缀来访问较长的路径(有某些限制)。然而,使用“\\?\”前缀的局限性通常超过了好处:
- 有许多 Win32 API 不支持带有此前缀的路径(例如,
LoadLibrary
在长度超过 260 个字符的路径上始终会失败)
- 使用“\\?\”前缀时,Win32 规范化规则不会生效。例如,默认情况下,路径中的“/”会转换为“\”、“.”和“..”分别转换为对当前目录和父目录的引用,依此类推:当您使用“\\?\”前缀时,这些都不会发生。
- 只因为你可以修改your如果程序支持更长的路径,其他程序可能无法打开您创建的文件。如果其他程序不这样做,就会出现这种情况also使用“\\?\”前缀。
老实说,第 2 点才是真正的杀手:使用“\\?\”前缀时,您会遇到各种各样的麻烦,而且如果您走这条路,您基本上必须自己重新实现 Win32 规范化规则。
因此,我的建议是坚持 260 的限制。至少在有更好的平台支持更长的路径之前是这样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)