Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

MFC递归搜索文件函数代码

$
0
0

自己写了一个MFC下的搜索文件的函数,递归遍历各级子目录搜索,对大小写不敏感。递归是个好东西啊,用递归写出来的东西往往代码简短,但不容易理解,并且容易出错,要多加注意。此函数毕竟只是个代码不足30行的小东西。目前存在缺点:不支持通配符*?等。后续将改进。

 

调用示例:

CStringArray aStrFile;
 int i = CFindFile(_T("D:\\"),_T("qq.txt"),&aStrFile);

 

函数代码:

//第一个参数为要搜索的路径,比如"c:\\dir\\"或"c:\\dir"则在包括此目录的所有子目录下搜索
//第二个参数为要搜索的文件,比如"qq.txt",需要提供文件后缀,大小写不敏感
//第三个参数用于保存搜索到的文件的全路径,请构造一个CStringArray对象并传入地址
INT CFindFile(const TCHAR *szPath,const TCHAR *szFileName,CStringArray *paStrResult)
{
	ASSERT(paStrResult!=NULL);
	CString StrPath(szPath);
	CString	StrFileName(szFileName);
	//检查路径字符串的最后一个字符是不是'\',不是则加上
	if (StrPath[StrPath.GetLength()-1]!=_T('\\'))
		StrPath += _T('\\');
	CString StrFindPath = StrPath + _T("*.*");
	//开始查找
	CFileFind finder;
	BOOL bWorking = finder.FindFile(StrFindPath);
	while(bWorking)
	{
		bWorking = finder.FindNextFile();
		//如果找到的是文件夹,递归进去
		if (finder.IsDirectory()&&!finder.IsDots())
		{
			CFindFile(StrPath+finder.GetFileName(),StrFileName,paStrResult);
		}
		//如果找到了文件,将绝对路径添加进字符串数组,大小写不敏感
		if (finder.GetFileName().CompareNoCase(StrFileName)==0)
		{
			paStrResult->Add(finder.GetFilePath());
		}
	}
	//返回找到的文件个数
	INT nFile = paStrResult->GetSize();
	return nFile;
}


 

 

 

作者:CharlesSimonyi 发表于2013-3-8 0:35:24 原文链接
阅读:95 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>