183上位机VC MFC实现文件分类管理
183上位机VC MFC实现文件分类管理 功能展示 有时文件夹内文件过多,想进行归档分类,我们就得对文件夹进行迭代查找文件,将相同后缀的文件移动到指定位置。当前例程就实现了文件分类整理功能。 点击浏览打开文件夹后会罗列出文件夹内全部文件; 双击列出的文件会搜索列出与此文件后缀相同的全部文件; 点击移动,可以将后缀相同的文件移动到指定的目录; 效果如图; 要点提示 文件夹的浏览我们习惯用函数SHBrowseForFolder()实现; 文件的移动可以用函数MoveFile(); 主要是用关键字查找文件功能和后缀查找文件类型的功能实现; 我们当前例程使用CFileFind类的成员变量编写两个函数,实现关键字查找文件,和文件后经名查找文件;两个函数都实现迭代查找功能; 实现功能 1.新建基于对话框的应用程序 2.拖拽一编辑框和按钮用于浏览与显示要查找的文件文件夹路径; - void CGkbc8Dlg::OnExplor()
- {
- char buf[MAX_PATH];
- ZeroMemory(buf,MAX_PATH);
- BROWSEINFO bif;
- bif.hwndOwner=GetSafeHwnd();
- bif.iImage = 0;
- bif.lParam=0;
- bif.lpfn=NULL;
- bif.lpszTitle="选择文件夹";
- bif.pidlRoot = 0;
- bif.pszDisplayName=buf;
- bif.ulFlags=BIF_EDITBOX;
- LPITEMIDLIST pIil=NULL;
- pIil=SHBrowseForFolder(&bif);
- if(pIil != NULL)
- {
- SHGetPathFromIDList(pIil,buf);
- SetDlgItemText(IDC_EDIT1,buf);
- CListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST1);
- pListBox->ResetContent();
- FindFile(CString(buf),CString('.'));
- pListBox->SetHorizontalExtent(600);
- }
- }
复制代码拖拽一列表框ID为IDC_LIST1用于显示已找到的文件路径; 双击列表控件,关联鼠标双击函数实现指定文件类型的查找; - void CGkbc8Dlg::OnDblclkList1()
- {
- CString sPath,sText;
- CListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST1);
- pListBox->GetText(pListBox->GetCurSel(),sText);
- sText= sText.Right(sText.GetLength()-sText.ReverseFind('.'));
- GetDlgItemText(IDC_EDIT1,sPath);
- pListBox->ResetContent();
- FindFileType(sPath,sText);
- }
复制代码3.拖拽复位和移动按钮,实现文件的生意查找与找到文件的移动功能 - void CGkbc8Dlg::OnReset()
- {
- CListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST1);
- pListBox->ResetContent();
- CString sPath;
- GetDlgItemText(IDC_EDIT1,sPath);
- if(sPath.IsEmpty())
- return;
- FindFile(sPath,CString('.'));
- }
- void CGkbc8Dlg::OnMove()
- {
- char buf[MAX_PATH];
- ZeroMemory(buf,MAX_PATH);
- BROWSEINFO bif;
- bif.hwndOwner=GetSafeHwnd();
- bif.iImage = 0;
- bif.lParam=0;
- bif.lpfn=NULL;
- bif.lpszTitle="选择文件夹";
- bif.pidlRoot = 0;
- bif.pszDisplayName=buf;
- bif.ulFlags=BIF_EDITBOX;
- LPITEMIDLIST pIil=NULL;
-
复制代码- pIil=SHBrowseForFolder(&bif);
- if(pIil != NULL)
- {
- SHGetPathFromIDList(pIil,buf);
- CString sNewFile,sOldFile;
- CListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST1);
- for(int i=0;i<pListBox->GetCount();i++)
- {
- pListBox->GetText(i,sOldFile);
- sNewFile=buf;
- sNewFile+=sOldFile.Right(sOldFile.GetLength()-sOldFile.ReverseFind('\\'));
- ::MoveFile(sOldFile,sNewFile);
- }
- OnReset();//复位列表框
- }
- }
复制代码其中 BOOL FindFile(CString sDir,CString sFileName); BOOLFindFileType(CString sDir,CString sFileName);由于函数体过长,可以下载例程学习 我们来演示下功能实现的整个过程
|