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

EVC下怎么根据文件名和扩展名查找文件

2012-02-06 
EVC下如何根据文件名和扩展名查找文件我利用FindFirstFile和FindNextFile 系统中已存在的文件,代码如下:CS

EVC下如何根据文件名和扩展名查找文件
我利用FindFirstFile和FindNextFile 系统中已存在的文件,代码如下:
  CString cFileList[50];
int nFileTotalCount;
nFileTotalCount=0;
HANDLE hFile = NULL; 
WIN32_FIND_DATA lpFindFileData; 
// BOOL bContinue = FALSE; 
int i = 0; 
for(i=0;i <50;i++) 
cFileList[i]=_T("");
i = 0; 
hFile = FindFirstFile(_T("*.kwj"),&lpFindFileData); 

while (1) 

cFileList[i]=lpFindFileData.cFileName; 
if (FindNextFile(hFile,&lpFindFileData)==0) 

FindClose(hFile); 
break; 

i++; 
nFileTotalCount++; 
}
return nFileTotalCount;
问题1:
如果我输入文件的扩展名,可以查找到该扩展名文件。但是返回的nFileTotalCount比实际数目少1,比如应该是2,但返回的是1.我在系统中建立了1.kwj和2.kwj文件,单步执行时会先找到2.kwj,在下一个循环中,lpFindFileData.cFileName=1.kwj,但是FindNextFile(hFile,&lpFindFileData)返回为0.
问题2:hFile = FindFirstFile(_T("*.kwj"),&lpFindFileData); 
如果根据文件名称查找,不能找到该文件,但是实际情况是该文件确实存在。比如hFile = FindFirstFile(_T("1.kwj"),&lpFindFileData); ,此时返回的nFileTotalCount=0;
问题3:
我最开始使用的是CFileFind类,但编译时错误,提示没有CFileFind类,将afx.h放到stdafx.h中也不行。

大家来看看我的程序哪里出了问题,不胜感激!!!

[解决办法]
FindFirstFile 就会找到第一个文件,你这个没有算,当然会少1. 调用FindFirstFile后应该判断hFile是不是等于INVALID_HANDLE_FILE 如果不等于就找到了第一个文件.所以nFileTotalCount++; 应该放在FindNextFile前面
[解决办法]

探讨
谢谢楼上的,那其他两个问题呢。尤其是扩展名可以查找,而具体的文件名不能查找。

[解决办法]
FindFirstFile 
FindNextFile
只能对输入的当前目录进行搜索,
FindFirstFile(_T("\\当前搜索目录\\*.kwj"),&lpFindFileData); 
如当前目录为根目录,则为\\*.kwj
如果文件在子文件夹中,需要对两个api返回的文件句柄进行判断,如果为文件夹就要进入该文件夹
用同样的方式搜索(可以在当前函数中使用递归)。
如果为文件就要判断文件名称是否和你需要的一致。


hp = FindFirstFile( fileFound, &info );
if(hp != INVALID_HANDLE_VALUE)
{
do
{
swprintf(fileFound, L"%s\\%s", lpFolderPath, info.cFileName);
DWORD dwAttribs = GetFileAttributes(fileFound);
if (dwAttribs & FILE_ATTRIBUTE_DIRECTORY)
{
。。。。
}
else
{
。。。。
}
}
while(FindNextFile(hp, &info)); 

FindClose(hp);
}

热点排行