工控编程吧
标题:
183上位机VC MFC实现文件分类管理
[打印本页]
作者:
qq263946146
时间:
2016-1-19 21:49
标题:
183上位机VC MFC实现文件分类管理
(, 下载次数: 4)
上传
点击文件名下载附件
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);由于函数体过长,可以下载例程学习
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/936dc7eece696b3fd4f6377c7a87ae4c/0/0/w_19rtejuqyp.swf-albumId=5226444909-tvId=5226444909-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4