首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

FindFirstFile()的结果很奇怪,该如何解决

2013-01-09 
FindFirstFile()的结果很奇怪我在F盘根目录放了一个叫“1.abcdef”的文件,然后执行下面的代码,输出结果很诡

FindFirstFile()的结果很奇怪
我在F盘根目录放了一个叫“1.abcdef”的文件,然后执行下面的代码,输出结果很诡异


#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获取长文件名再判断一下
[解决办法]
设置后缀的长度来控制你想要得到的长度。

热点排行