166上位机VC MFC多线程快速文件搜索
166上位机VC MFC多线程快速文件搜索
功能展示
文件的搜索在上位机开发时也是常用到的功能,我们当前例程实现多线程环境下在任何位置中文件的搜索功能,可以整个文件名搜索部分文件名搜索,后缀进行搜索,效果如图; 要点提示 文件的搜索我们可以使用类CFileFind中的成员函数为实现;主要有函数有FileFile()用于查找指定文件;FindNextFile()用于查找下一文件名,通过返回值可以判断是否是查找的文件; IsDots() 用于判断目标文件是否是 “.”或”..”; IsDirectory()用于判断目标文件是否是文件夹; GetFileName()用于获取查找到的文件的文件名; GetFilePath()用于获取查找到的文件的绝对路径;
实现功能 1.新建基于对话框的应用程序 2.拖拽一编辑框ID为IDC_EDIT1用于显示要查找的文件夹路径; 拖拽一按钮关联函数,用于浏览打开要查找的文件夹 拖拽一编辑框ID为IDC_EDIT2,用于输入要查找的文件名; 拖拽两按钮查找,停止查找,用于开始与停止 查找;
拖拽一列表框用于罗列出查找到的文件;按钮函数依次为 - void CGkbc8Dlg::OnAdd()
- {
- BROWSEINFO bi;
- char buffer[MAX_PATH];
- ZeroMemory(buffer,MAX_PATH);
- bi.hwndOwner=GetSafeHwnd();
- bi.pidlRoot=NULL;
- bi.pszDisplayName=buffer;
- bi.lpszTitle="选择文件夹";
- bi.ulFlags=BIF_EDITBOX;
- bi.lpfn=NULL;
- bi.lParam=0;
- bi.iImage=0;
- LPITEMIDLIST pList=NULL;
- if((pList=SHBrowseForFolder(&bi))!=NULL)
- {
- SHGetPathFromIDList(pList,buffer);
- SetDlgItemText(IDC_EDIT1,buffer);}
复制代码- void CGkbc8Dlg::OnFind() //开户线程查找
- {
- CWinThread* pThread = AfxBeginThread(
- FindFileThreadFunc,
- this,
- THREAD_PRIORITY_NORMAL,
- 0,
- 0);
- ASSERT_VALID( pThread );
- }
- void CGkbc8Dlg::OnBtstop()
- {
- m_bIsWaitStop = TRUE;
- }
- 其中FindFileThreadFunc为线程函数
- UINT FindFileThreadFunc( LPVOID lParam )
- {
- CGkbc8Dlg* pArent = (CGkbc8Dlg*)lParam;
- pArent->FindFile();
- return 0;
- }
复制代码线程函数中又调用查找文件函数实现文件查找功能 m_bIsWaitStop为添加的标识是否停止 搜索的变量,如果点击停止,将绘终止线程退出搜索; 我们来演示下功能实现的整个过程
|