是否有不搜索短文件名的Windows FindFirstFile/FindNextFile API的替代方法?
Is there an alternative to the Windows FindFirstFile/FindNextFile API that doesn't search short file names?
我使用Windows API调用FindFirstFile和FindNextFile来搜索与目录中某个通配符字符串匹配的文件。例如,我可能想要查找目录中的所有XML文件,因此我使用模式"*. XML"进行搜索。
我遇到了这样的问题,如果我正在搜索一个3个字母的扩展名,一个文件的扩展名以那个3个字母的扩展名开始,它将被我的搜索拾取,即使扩展名在前3个字符之后包含更多字符。例如,如果我的文件被命名为。Xmlaaaa,这将通过搜索"*.xml"获得。该文件的短名称是someo ~1.xml,它与我的通配符字符串匹配。
我可以做我自己的通配符匹配来解决这个问题,但大概Windows API能够比我更有效地做到这一点,我的代码会更简单。据我所知,没有一种方法可以强制这些函数忽略短名称。是否有任何API Windows公开与此功能?
查看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会对提供的字符串进行相同的通配符匹配。因此,我可以在搜索中添加第二步,验证长名称是否与模式匹配。
- 用于访问容器<T>数据成员的正确 API
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++MySQL C api用户输入行
- 如何使用 AWS Transcribe C++ API 中的'StartTranscriptionJobRequest'?
- 将std::string传递给WriteConsole API
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 在gtest.中使用fff.h模拟系统API
- 有没有任务栏API可以立即应用注册表更改
- C++win32 API创建多个类似视口的窗口
- 使用libcurl提交批量url的正确BING Api POST url是什么
- 如何将真正的字符串从python c-api转换为python脚本
- 使用Qt框架在c ++类中创建API调用
- Libreoffice API (UNO):需要更改用户的 xTextField 文本
- 使用 WIN32 API (C/C++) 对特定树视图项进行着色
- 使用 Python Extension API 包装复杂C++类
- 如何使用 samtools C API 构建一个简单的主.cpp文件
- 第三方 API 中的编译错误 - Visual Studio
- Tensorflow c++ api undefined reference to 'tflite::D efaultErrorReporter()'
- 是否有不搜索短文件名的Windows FindFirstFile/FindNextFile API的替代方法?
- FindFirstFile、FindNextFile api不可靠吗?