如何使用任何形式的Windows API迭代长路径名

时间:2011-01-25 11:02:07

标签: c windows winapi ntfs

我在服务器上有一些超过MAX_PATH限制的文件。 我一再听说你可以通过预先挂起的\\?\列出这些文件到路径。但是,这并没有解决FindFirstFile[Ex]及其合作伙伴的问题,因为他们使用的数据结构将文件名长度限制为MAX_PATH

有没有其他方法可以迭代目录结构来查找名称太长的文件?我见过这样做的实用程序,但没有一个以源代码形式提供。

请注意,我已经看过.NET BCL人员的博客条目,并按照他们提供的链接进行操作。

为了简单起见,我宁愿在C或C ++中这样做,但现在任何免费语言都可以。

赞赏代码,文档或任何有用的内容。

1 个答案:

答案 0 :(得分:10)

我认为这里没有问题。您指的是确实将文件名长度限制为MAX_PATH的{​​{3}}。但由于这只是文件名部分,并且路径被省略,因此没有限制。

在目录中,对象(文件或文件夹)的长度有限,通常为255个字符。您可以使用WIN32_FIND_DATAlpMaximumComponentLength参数确定此限制的内容。如果安装在Windows中的任何卷的最大组件长度超过255,我会感到惊讶。

GetVolumeInformation的调用收到一个空终止字符串lpFileName,它指定要搜索的目录和文件名(例如“* .txt”)。文档说明:

  

在此功能的ANSI版本中,   名称仅限于MAX_PATH   字符。将此限制扩展到   32,767个宽字符,称之为   Unicode版本的功能和   将“\\?\”添加到路径中。