• 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;
    }
    

      

  • 相关阅读:
    群辉:服务器错误 错误代码38
    wireshark filter manualpage
    收集下shell使用笔记
    Android kernel LOGO的更换方法
    java实现截屏
    [转]android4.0.3 修改启动动画和开机声音
    博客搬迁
    idea 2017.3创建springboot项目报无效的源发行版: 1.8或者Unsupported major.minor version 52.0的解决方案
    关于mybatis查询集合返回为[null]的问题
    关于mybatis中resultType返回null的问题
  • 原文地址:https://www.cnblogs.com/qianlifeng/p/2180734.html
Copyright © 2020-2023  润新知