是否有替代Windows FindFirstFile / FindNextFile API不search短文件名?

我使用Windows API调用FindFirstFile和FindNextFile来search匹配目录中的某个通配符string的文件。 例如,我可能想要查找目录中的所有XML文件,因此我使用“* .xml”模式进行search。

我遇到的问题是,如果我search3个字母的扩展名,并且文件的扩展名以3个字母的扩展名开头,那么即使扩展名包含更多字符例如,如果我的文件名为somelongname.xmlaaaa,则会通过search“* .xml”获取。 该文件的简称是somelo〜1.xml,与我的通配符string相匹配。

我可以做自己的通配符来解决这个问题,但是大概一个Windows API能够比我更有效地做到这一点,而且我的代码会更简单。 据我所知,没有办法强制这些function忽略短名称。 是否有任何API Windows公开与此function?

Solutions Collecting From Web of "是否有替代Windows FindFirstFile / FindNextFile API不search短文件名?"

检查FindFirstFileEx – 它有一个fInfoLevelId参数,它接受一个FINDEX_INFO_LEVELS枚举:

typedef enum _FINDEX_INFO_LEVELS { FindExInfoStandard, FindExInfoBasic, FindExInfoMaxInfoLevel } FINDEX_INFO_LEVELS; 

FindExInfoBasic

FindFirstFileEx函数不查询短文件名,提高整体枚举速度。 数据以WIN32_FIND_DATA结构返回,并且cAlternateFileName成员始终为NULL字符串。

然而:

Windows server 2008,Windows Vista,Windows server 2003和Windows XP:直到Windows server 2008 R2和Windows 7才支持此值。

不幸的是,JoeFish在他的回答中找到的文件证明有点误导。 即使您在FindExInfoBasic中传递,搜索仍将找到与短名称匹配的文件。 它只是不包括WIN32_FIND_DATA结构的cAlternateFileName成员中的短文件名。

但是我发现有一个Windows函数PathMatchSpec将对提供的字符串进行相同的通配符匹配。 所以,我可以添加第二步到我的搜索验证长名称匹配的模式。 它甚至可以在Windows XP中使用。