批量修改同一文件夹下文件名字,可以定义一个新名字,后面接着文件从0开始的序号。
CFileDialog,CString方法操作得到所需,rename
按下“添加文件”按钮后,打开一个文件对话框objFileDlg。但是要设置objFileDlg最大文件名缓冲区。然后获得第一个文件的起始位置,依次把全部的文件完整名添加到列表控件中,这里列表控件使用升序排序功能。
/********************************************************** 函数作用:添加文件按钮响应 **********************************************************/ void CRenameMFileDlg::OnAddFile() { CFileDialog objFileDlg(TRUE,"文件","*.*",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT| OFN_ALLOWMULTISELECT,"FILE(*.*)|*.*|jpeg(*.jpg)|*.jpg|文本(*.txt)|*.txt||",NULL); char fileBuffer[5000] = {0}; //设定一个文件名缓存,因为CFileDialog内置的文件名缓存长度只有200,但是很多时候,文件的路径远大于这个数,为了保险起见,所以要自己设定一个文件名缓存 objFileDlg.m_ofn.lpstrFile = fileBuffer; //设定缓存长度 objFileDlg.m_ofn.nMaxFile = 5000; if(objFileDlg.DoModal()==IDOK) { POSITION pos = objFileDlg.GetStartPosition(); while(pos != NULL) { CString pathname=objFileDlg.GetNextPathName(pos); m_ctrFileList.InsertItem(m_ctrFileList.GetItemCount(),pathname.GetBuffer(0)); } } }
首先获得拖动文件的数目,然后依次把文件完整名添加到列表控件中。
/********************************************************** 函数作用:拖动文件到列表控件中 **********************************************************/ void CRenameMFileDlg::OnDropFiles(HDROP hDropInfo) { // TODO: Add your message handler code here and/or call default int iDropCount=DragQueryFile(hDropInfo,-1,NULL,0);//取得被拖动文件的数目 for(int i=0;i< iDropCount;i++) { char sCompleteName[MAX_PATH]; DragQueryFile(hDropInfo,i,sCompleteName,MAX_PATH);//获得拖曳的第i个文件的文件名 m_ctrFileList.InsertItem(m_ctrFileList.GetItemCount(),sCompleteName); } DragFinish(hDropInfo); //拖放结束后,释放内存 CDialog::OnDropFiles(hDropInfo); }
具体思路如流程图所示。
/********************************************************** 函数作用:重命名文件 **********************************************************/ void CRenameMFileDlg::OnReName() { //此处省略很多代码 for(int i=0;i<iSum;i++) { CString sInitCompleteName = m_ctrFileList.GetItemText(i,0);//得到文件初始完整路径和名 CString sCompleteTmp = sInitCompleteName; int iPointPos = sCompleteTmp.ReverseFind('.');//找到点在字符串中的位置 int iFormatLen = sCompleteTmp.GetLength() - iPointPos;//求出格式串的长度,包含“.” CString sFormat = sCompleteTmp.Right(iFormatLen);//得到文件的格式 int iSlashPos = sCompleteTmp.ReverseFind('\\');//找到最后一个斜杠 CString sPath = sCompleteTmp.Left(iSlashPos+1);//包含斜杠 CString sNewPathAndName; sNewPathAndName.Format("%s%s%d%s",sPath,sNewName,i,sFormat); ::rename(sInitCompleteName,sNewPathAndName); } //此处省略很多代码 }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/luoyikun/article/details/47761453