mfc文件查找

  最近在学MFC,小东西需求写了下面两个类。先记录下来,也算初学MFC的见证!

/************************************************************************
说明:
	在文件夹中查找文件(仅在指定文件夹查找,不递归)
参数:
	fileName:要查找的文件名。支持通配符*
	directory:要查找的文件所在的目录路径
返回值:
	pair<string,string>类型的数组,map<文件名,文件路径>
************************************************************************/
vector<pair<CString,CString>> FileHelper::FindFilesInDirecotry(CString fileName,CString directory )
{
	vector<pair<CString,CString>> files;

	if(directory.Right(1) != "\\") //保证目录是以\结尾的 
	{	
		directory += "\\"; 
	}
	directory += fileName;
	CFileFind finder;
	BOOL success = finder.FindFile(directory);
	while(success)
	{
		success = finder.FindNextFile();
		CString name = finder.GetFileName();
		CString path = finder.GetFilePath();
		pair<CString,CString> fileMap(name,path);
		files.push_back(fileMap);
	}
	finder.Close();
	return files;
}


/************************************************************************
说明:
	在文件夹中递归查找文件
参数:
	fileName:要查找的文件名。支持通配符*
	directory:要查找的文件所在的目录路径
	recursionCount:递归查找的深度,默认为-1(不限制深度),0表示只搜索给定的directory目录
返回值:
	pair<string,string>类型的数组,map<文件名,文件路径>
************************************************************************/
vector<pair<CString,CString>> FileHelper::FindFilesInDirecotryRecursion( CString fileName,CString directory,int recursionCount)
{
	vector<pair<CString,CString>> files;

	int curRecursionCount = recursionCount;

	//先对参数传进来的文件夹查找
	vector<pair<CString,CString>> localFiles =  FindFilesInDirecotry(fileName,directory);
	files.insert(files.end(),localFiles.begin(),localFiles.end());

	//然后对此文件夹下面的子文件夹递归查找
	CFileFind finder; 
	if(directory.Right(1) != "\\") //保证目录是以\结尾的
	{	
		directory += "\\"; 
	}
	directory += "*.*"; 

	BOOL res = finder.FindFile(directory); 
	while (res)
	{
		res = finder.FindNextFile();
		CString path = finder.GetFilePath();
		CString name = finder.GetFileName();
		curRecursionCount = recursionCount;  //查找同级目录的时候将当前深度设置为给定值
		if(finder.IsDirectory() && !finder.IsDots()) 
		{
			if(curRecursionCount >= 1 || curRecursionCount == -1 )
			{
				if(curRecursionCount >= 1)
				{
					curRecursionCount--;
				}
				localFiles = FindFilesInDirecotryRecursion(fileName,path,curRecursionCount); //如果目标是个文件夹,则利用嵌套来遍历 
				files.insert(files.end(),localFiles.begin(),localFiles.end());
			}
		}
	}
	finder.Close();
	return files;
}

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值