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

Jim*_*imR 7 c windows winapi ntfs

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

有没有其他方法迭代目录结构,以找到名称太长的文件?我已经看过这样做的实用程序,但它们都没有以源代码形式提供.

请注意,我已经看到.NET BCL人员的博客条目,并按照他们提供的链接.

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

我们赞赏代码,文档或任何有用的指针.

Dav*_*nan 10

我不认为这里有问题.你指的WIN32_FIND_DATA是确实返回长度有限的文件名MAX_PATH.但由于这只是文件名部分,并且路径被省略,因此没有限制.

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

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

在此函数的ANSI版本中,名称仅限于MAX_PATH字符.要将此限制扩展为32,767个宽字符,请调用该函数的Unicode版本并在路径前加上"\\?\".