前几天有哥们工作需要用到按指定文件名批量改名,在网上找了一下一般都不好用,也难的去找。自己用vc实现了一个简单程序完成这个任务,实现还是很简单,大致流程就是把图片路径读取,然在导入批量的文件名或者手动输入也可然后进行改名。
简单程序界面:
导入图片
批量导入改的文件名 ,只要是txt格式就可以 一行一个文件名如下
也可以双击手动输入文件名可以 运行如下就快速的改好了。
说一下主要的实现的:
主要用到改名函数rename;
void CModifyNameDlg::OnReName()
{
CString DesName,strTemp,nameTemp,sourceName,strExt;
count = m_filelist.GetItemCount();
for(int i=0;i<count;i++)
{
if(strcmp(m_filelist.GetItemText(i,3), "成功")==0)
{
continue;
}
nameTemp=m_filelist.GetItemText(i,1);
strTemp =nameTemp;
sourceName=nameTemp;
if(strTemp.Right(4).GetAt(0)=='.')
strExt=strTemp.Right(3);
else
{
if(strTemp.Right(2).GetAt(0)=='.')
strExt=strTemp.Right(1);
else
strExt="";
}
int pos=nameTemp.Find("\\");
while(pos>0)
{
nameTemp=nameTemp.Right(nameTemp.GetLength()-1-pos);
pos=nameTemp.Find("\\");
}
DesName=m_filelist.GetItemText(i,2);
if(DesName == ""){
AfxMessageBox(_T("请输入要改的文件名"));
return;
}
strTemp=strTemp.Left(strTemp.GetLength()-nameTemp.GetLength());
CString temp;temp.Format("%s%s.%s",strTemp,DesName,strExt);
sourceName.Replace("\\","\\\\");
temp.Replace("\\","\\\\");
int j;
//CString returnCode;
if(strcmp(sourceName, temp)==0){
m_filelist.SetItemText(i,3,"不修改与原来一致");
}else{
if(j= ::rename(sourceName,temp)< 0)
{
m_filelist.SetItemText(i,3,"失败(有重名文件或者文件在使用)");
}else{
m_filelist.SetItemText(i,3,"成功");
}
}
}
}
注意在调试时候 rename需要双斜杠才起作用
sourceName.Replace("\\","\\\\");
temp.Replace("\\","\\\\");
批量文件名文本逐行读取如下:
void CModifyNameDlg::OnBtpictext()
{
// TODO: Add your control notification handler code here
//创建文件对话框
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY |
OFN_OVERWRITEPROMPT, _T("文本文件(*.txt)"));
if (dlg.DoModal() == IDOK)
{
//获得文件路径
CString textName = dlg.GetPathName();
CStdioFile file;
//打开文件
if (!file.Open(textName, CFile::modeRead))
{
AfxMessageBox(_T("文件打开失败。"));
return;
}
int count1 = m_filelist.GetItemCount();
if(count1 <= 0){
AfxMessageBox(_T("请先添加图片"));
}
//读文件
CString strText = _T("");
int i=0;
while (file.ReadString(strText))
{ if(!strText.IsEmpty()){
m_filelist.SetItemText(i,2,strText);
i++;
}
}
//关闭文件
file.Close();
}
}
为了可以手动在列表控件(listCtrl)可以输入文件名,进行了扩展。
功能比较少但是还是比较好用。
可执行程序:ModifyName