码迷,mamicode.com
首页 > 编程语言 > 详细

MFC批量修改文件名工具

时间:2015-08-19 00:41:09      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:mfc   rename   

1批量修改文件名描述

1.1功能描述

批量修改同一文件夹下文件名字,可以定义一个新名字,后面接着文件从0开始的序号。

1.2所需技术

CFileDialogCString方法操作得到所需,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批量修改文件名运行情况

技术分享
源码下载





版权声明:本文为博主原创文章,未经博主允许不得转载。

MFC批量修改文件名工具

标签:mfc   rename   

原文地址:http://blog.csdn.net/luoyikun/article/details/47761453

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!