1批量修改文件名描述
1.1功能描述
批量修改同一文件夹下文件名字,可以定义一个新名字,后面接着文件从0开始的序号。
1.2所需技术
CFileDialog,CString方法操作得到所需,rename
2批量修改文件名运行流程
3批量修改文件名详细设计
3.1添加文件按钮响应OnAddFile
按下“添加文件”按钮后,打开一个文件对话框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));
}
}
}
3.2拖动文件到列表控件中OnDropFiles
首先获得拖动文件的数目,然后依次把文件完整名添加到列表控件中。
/**********************************************************
函数作用:拖动文件到列表控件中
**********************************************************/
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);
}
3.3批量重命名文件OnReName
具体思路如流程图所示。
/**********************************************************
函数作用:重命名文件
**********************************************************/
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);
}
//此处省略很多代码
}
4批量修改文件名运行情况
源码下载