C ++ WinAPI:处理长文件路径/名称
我正在寻找在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);
没有找到相关结果
已邀请:
3 个回复
泉秘胁
常量的含义。 但是,您可以通过在路径前添加“\?”来访问更长的路径(具有某些限制)。但是,使用“\?”前缀的限制通常超过了好处: 有许多Win32 API不支持具有此前缀的路径(例如,在长度超过260个字符的路径上,
将始终失败) 使用“\?”前缀时,Win32规范化规则不会生效。例如,默认情况下,路径中的“/”将转换为“”,“。”并且“..”分别转换为对当前目录和父目录的引用,依此类推:当您使用“\?”前缀时,不会发生这种情况。 仅仅因为您可以修改程序以支持更长的路径,其他程序可能无法打开您创建的文件。如果其他程序也不使用“\?”前缀,则会出现这种情况。 说实话,第2点是真正的杀手:当你使用“\?”前缀时,你会遇到各种各样的麻烦,如果你走这条路,你基本上必须自己重新实现Win32规范化规则。 因此,我的建议是坚持260限制。至少在更长的路径上有更好的平台支持。
谦响局豢报
讹巳漓把备