178上位机VC MFC批量修改文件名称
178上位机VC MFC批量修改文件名称 功能展示 有规则地重命名文件夹内文件,在开发上位机时也是时有用到的功能,我们当前例程实现将指定文件夹内全部文件按时指定的新文件名加索引进行更改,效果如图,效果如图; 要点提示 文件夹的选择与获取可以用函数SHBrowseForFolder()与SHGetPathFromIDList()实现; 文件夹内文件的迭代搜索可以用CFileFind类的FindFile(),FindNextFile()等成员函数实现; 文件的重命名和移动都可以通知函数MoveFile(),也可以用rename()函数但得添加其所在头文件#include<stdio.h> 实现功能 1.新建基于对话框的应用程序 2.拖拽两编辑框ID为IDC_EDIT2,IDC_EDIT1,用于输入文件目录与新文件名; 拖拽<浏览>按钮用于浏览文件夹; 拖拽<重命名>按钮实现文件的更改; 拖拽列表控件ID为IDC_LIST1,用于显示全部要重命名的文件 - void CGkbc8Dlg::OnExplor()
- {
- BROWSEINFO bif;
- char buf[MAX_PATH];
- ZeroMemory(buf,MAX_PATH);
- bif.hwndOwner= GetSafeHwnd();
- bif.iImage=0;
- bif.lParam=0;
- bif.lpfn=NULL;
- bif.lpszTitle="Choose Folder";
- bif.pidlRoot=0;
- bif.pszDisplayName=buf;
- bif.ulFlags=BIF_EDITBOX;
- LPITEMIDLIST pList=NULL;
- pList=SHBrowseForFolder(&bif);
- if(NULL!=pList)
- {
- SHGetPathFromIDList(pList,buf);
- SetDlgItemText(IDC_EDIT2,buf);
- }
- }
复制代码- void CGkbc8Dlg::OnRename()
- {
- CListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST1);
- pListBox->ResetContent();
- pListBox->SetHorizontalExtent(1000);//增加些宽度
-
- CString sPathName;
- GetDlgItemText(IDC_EDIT2,sPathName);
- FindFile(sPathName,".");
- //
- CString sPath,sIndex,sFileName;
- GetDlgItemText(IDC_EDIT1,sFileName);
- int nCount = pListBox->GetCount();
- for(int i=0;i<nCount;i++)
- {
- pListBox->GetText(i,sPath);
- sPathName=sPath.Left(sPath.ReverseFind('\\')+1);//路径
- sPathName+=sFileName;
- sIndex.Format("%d",i);//文件索引
- sPathName+=sIndex;
- sPathName+=sPath.Right(sPath.GetLength()-sPath.ReverseFind('.'));//后缀
- MoveFile(sPath,sPathName);
- }
- }
- BOOL CGkbc8Dlg::FindFile(CString sDir,CString sFileName)
- {
- CString sTemp;//路径改为\*.*形式
- if(sDir.Right(1)!="\")
- sTemp.Format("%s\\*.*",sDir);
- else
- sTemp.Format("%s*.*",sDir);
- //
- CString sFindFileName;//找到的文件名
- CFileFind findfile;
- BOOL bfind=findfile.FindFile(sTemp);
-
复制代码- while(bfind)
- {
- bfind=findfile.FindNextFile();
- if(findfile.IsDirectory()&&!findfile.IsDots())
- {
- FindFile(findfile.GetFilePath(),sFileName);
- }
- else if(!findfile.IsDots())
- {
- sFindFileName = findfile.GetFileName();
- sFileName.MakeUpper();
- CString sUFileName = sFileName;//大写
- sFileName.MakeLower();
- CString sLFileName = sFileName;//小写
- if(sFileName==sFindFileName||sFindFileName.Find(sLFileName)!=-1||sFindFileName.Find(sUFileName)!=-1)
- {
- CListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST1);
- pListBox->AddString(findfile.GetFilePath());
- }
- }
- }
- return bfind;
- }
复制代码我们来演示下功能实现的整个过程
|