FindFirstFile()的结果很奇怪解决思路
FindFirstFile()的结果很奇怪
我在F盘根目录放了一个叫“1.abcdef”的文件,然后执行下面的代码,输出结果很诡异
输出结果为:
F:\*.a (no found)
F:\*.ab (no found)
F:\*.abc 1.abcdef
F:\*.abcd (no found)
F:\*.abcde (no found)
F:\*.abcdef 1.abcdef
我很好奇搜索“F:\*.abc”时为什么会找得到呢?应该是“F:\*.abc*”才找到得的吧?
有什么办法可以避免这种情况呢?(现在的项目遇到这样的问题,会搜索到无关的文件)
谢谢~~
------解决方案--------------------
FindFirstFile在搜索时,长文件名和8.3的短文件名一起搜索,“F:\*.abc”的情况应该是按短文件名搜索出来的,碰到这种情况,用GetLongPathName获取长文件名再判断一下
------解决方案--------------------
设置后缀的长度来控制你想要得到的长度。
我在F盘根目录放了一个叫“1.abcdef”的文件,然后执行下面的代码,输出结果很诡异
- C/C++ code
#include <stdio.h> #include <Windows.h> #include <tchar.h> void Test1() { LPCTSTR TEST_NAME[] = { _T("F:\\*.a"), _T("F:\\*.ab"), _T("F:\\*.abc"), _T("F:\\*.abcd"), _T("F:\\*.abcde"), _T("F:\\*.abcdef"), }; for (size_t i=0; i<sizeof(TEST_NAME)/sizeof(TEST_NAME[0]); ++i) { _tprintf_s(_T("%12s\t"), TEST_NAME[i]); WIN32_FIND_DATA data = {0}; HANDLE h = ::FindFirstFile( TEST_NAME[i], &data ); if (h == INVALID_HANDLE_VALUE) { _tprintf_s(_T("(no found)\n")); } else { _tprintf_s( _T("%s\n"), data.cFileName ); ::FindClose(h); } } } void main() { Test1(); system("pause"); }
输出结果为:
F:\*.a (no found)
F:\*.ab (no found)
F:\*.abc 1.abcdef
F:\*.abcd (no found)
F:\*.abcde (no found)
F:\*.abcdef 1.abcdef
我很好奇搜索“F:\*.abc”时为什么会找得到呢?应该是“F:\*.abc*”才找到得的吧?
有什么办法可以避免这种情况呢?(现在的项目遇到这样的问题,会搜索到无关的文件)
谢谢~~
------解决方案--------------------
FindFirstFile在搜索时,长文件名和8.3的短文件名一起搜索,“F:\*.abc”的情况应该是按短文件名搜索出来的,碰到这种情况,用GetLongPathName获取长文件名再判断一下
------解决方案--------------------
设置后缀的长度来控制你想要得到的长度。