如何使用任何forms的Windows API迭代长path名称

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

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

请注意,我已经看到了来自.NET BCL人员的博客条目,并遵循了他们提供的链接。

为了简单起见,我宁愿用C或C ++来完成这项工作,但现在可以使用任何可用的语言。

指向代码,文档或任何有用的指标表示赞赏。

我不认为这里有问题。 你指的是WIN32_FIND_DATA ,它确实返回了长度限制为MAX_PATH文件名。 但是由于这只是文件名部分,路径被省略,所以没有限制。

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

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

在该函数的ANSI版本中,名称被限制为MAX_PATH个字符。 要将此限制扩展为32,767个宽字符,请调用该函数的Unicode版本,并将“\\?\”添加到路径中。