winapi - WIN32 API: 读取非常长的"Win32 file namespace" 名称

  显示原文与译文双语对照的内容

抱歉我没有自己测试过这个,但是,说我们可以做一个很长的时间( 比 MAX_PATH IE 更长) 。 260个字符) 文件 NAME 通过指定"。WIN32 文件命名空间":

使用 CreateFile API很容易,因为它的签名接受 LPCTSTR lpFileName,而对输入长度没有任何限制:

但是我们怎么能读这么长的文件 NAME? FindFirstFile 返回的W32_FIND_DATA 只包含 TCHAR cFileName[MAX_PATH]

当实际文件 NAME 不适合 cFileName[MAX_PATH] 时,我们可能会得到 8.3 NAME?

时间: 原作者:

对于 CreateFile,你可以使用API的Unicode版本和特殊的L"?" 前缀来避免 MAX_PATH 限制。

对于 W32_FIND_DATA 来说,事情有点不同。 记录包含作为内联字符数组的文件名。 但是,记录中的这些文件名仅包含与它的容器相对应的对象的名称。 因为我的意思是这些文件名是相对于它们所在的目录。 实际上它们不能超过 MAX_PATH 长度实际上不是限制,因为路径中的每个组件本身的长度有限,通常不超过1 个字符。

在你链接的MSDN文章中讨论了路径组件到 255个字符的限制: 名称文件,路径和命名空间名称。

Windows API有许多函数,它还有Unicode版本允许扩展长度路径为 32,767个字符的最大路径长度。 这种路径由由反斜线分隔的组件组成,每个组件都返回GetVolumeInformation函数( 此值通常为 255个字符)的lpMaximumComponentLength参数中返回的值。 若要指定扩展长度路径,请使用""前缀。 例如"d: very长路径"。

原作者:
...