Win32 API:读取很长的" Win32文件命名空间"名

时间:2014-11-26 11:40:33

标签: winapi filenames

抱歉,我自己没有对此进行测试,但MSDN表示我们可以通过指定" Win32文件命名空间"来制作一个非常长(超过MAX_PATH即260个字符)的文件名。 :

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

但是我们怎么能读出如此长的文件名呢? W32_FIND_DATA返回的FindFirstFile仅包含TCHAR cFileName[MAX_PATH]

当实际文件名不适合cFileName[MAX_PATH]时,我们是否会获得8.3名称?

1 个答案:

答案 0 :(得分:1)

对于CreateFile,您可以使用Unicode的Unicode版本和特殊的MAX_PATH前缀来转义L"\\?\"限制。

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

路径组件的长度限制为255个字符在您链接到的MSDN文章中进行了讨论:Naming Files, Paths, and Namespaces

  

Windows API有许多函数也具有Unicode版本,允许扩展长度路径,最大总路径长度为32,767个字符。   这种类型的路径由反斜杠分隔的组件组成,每个组件都取决于GetVolumeInformation函数的lpMaximumComponentLength参数中返回的值(此值通常为255个字符)。   要指定扩展长度路径,请使用" \\?\"字首。例如," \\?\ D:\非常长的路径"。