MFC随手记之四_文件查找器

MFC实现代码:
void CMytest_2View::OnFilefind() 
{
	// TODO: Add your command handler code here
	
	CString strFolderPath(_T(""));
	TCHAR szPath[_MAX_PATH];

	BROWSEINFO bi;
	bi.hwndOwner=GetSafeHwnd();
	bi.pidlRoot=NULL;
	bi.lpszTitle=_T("选择文件夹");
	bi.pszDisplayName=szPath;
	bi.ulFlags=BIF_RETURNONLYFSDIRS;
	bi.lpfn=NULL;
	bi.lParam=NULL;
    
	LPITEMIDLIST pItemIDList=SHBrowseForFolder(&bi);
       //以上部分为显示一个对话框用于获得文件路径
	if(pItemIDList)
	{
		if(SHGetPathFromIDList(pItemIDList,szPath))
		{
			strFolderPath=szPath;
			MessageBox(_T(szPath));
       //得到文件路径并以对话框显示
		}
        //下面注释代码为参考链接中的代码,我注释了他们
	// 防止内存泄露,要使用IMalloc接口
	/*	IMalloc*pMalloc;
		if( SHGetMalloc(&pMalloc) !=NOERROR )
		{
			TRACE(_T("无法取得外壳程序的IMalloc接口\n"));
		}

		pMalloc->Free(pItemIDList);
		if(pMalloc)
		pMalloc->Release();
	*/
	}
	else
	{
		strFolderPath=_T(""); // 文件夹路径为空
		MessageBox(_T("文件路径获取失败"));
	}

		ScanFile(strFolderPath);
      //到此为止,这些代码仅仅完成了获取路径的功能,真正的功能在ScanFile中得到实现
}


//该函数添加方法:
//在class视图中的view类中右击选择add member functions。分别填入
//void 和ScanFile(CString strPath)
	void CMytest_2View::ScanFile(CString strPath)//原代码的参数为引用类型。我觉得这尼玛递归很危险。
	{
		CFileFind find;CString strTemp=strPath;
		CString strDirectory=strPath +_T("\\*.*");
		CString strFile; MessageBox(_T(strDirectory));
		vector<CString> m_vStrAllFiles; 
		// zm容器
		BOOL IsFind=find.FindFile(strDirectory);
		while(IsFind ){IsFind=find.FindNextFile();
	  //经过这个操作才是文件夹中第一个子文件(即"."文件)。
// 如果是"." 则不扫描。过滤掉"."和“..”两个不可见文件。关于这个“.”文件见MFC随手记之三。
	if(find.IsDots())continue;
// 如果是是目录,继续扫描此目录
	else if(find.IsDirectory())
	{
		strFile=find.GetFileName();strTemp=strPath+_T("\\") +strFile;
                      //我把源代码里的strTemp替换成strPath,这样才能递归。

			ScanFile(strTemp);
		}
	   // 文件
		else
		{
			strFile=find.GetFileName();

	// 此处也可以根据相应的扩展名来设置

                       //你可以选择进VECTOR.
			m_vStrAllFiles.push_back(strFile);
                        //显示非文件夹文件
			MessageBox(_T(strFile));
		}
	}

	find.Close();
}

程序应用:
但文件夹的图片文件过于多的时候可以选择用它来计数!


参考资料:
http://bbs.csdn.net/topics/360170037?page=1(觉得源代码有几个问题,修改之后运行正确)


这里还一个非MFC实现的链接,不过我没看。先留着:
http://www.bobd.cn/itschool/Program/vc/200612/itschool_13397.html






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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值