标签:文 文件批量重命名 cmfcshelllistctrl
之前在使用SourceInsight查看一些开源项目的源代码时发现了一个很重要的问题,就是有些开源的工程的头文件现在都没有.h的后缀名了。编译器可以包含这些没有扩展名的头文件,但是使用SourceInsight打开这些工程时却没办法包含这些头文件,或者说即使包含了这些头文件在SourceInsight中查看源码时要找到某个类的声明更本找不到,不知道这算不算SourceInsight的一个bug。
我使用SouceInsight主要的原因就是开发时使用的开源库文档很少,很多时候要查看某个函数的用法都只能去查看源代码,然后在整个工程中查看这些函数是如何使用的。如果SourceInsight不能包含并且找到不带.h后缀的头文件,那基本就没有使用SourceInsight的必要了。
基于以上原因,做了一个对文件后缀名批量更改的工具,之前在网上也查找对文件进行批量更改的工具,功能很强大,但是用起来都不是很顺手,或者说不太符合我的要求吧,我只需要对符合条件的文件更改文件的后缀。
下面是软件的运行截图:
制作这个工具主要有两个问题:
m_tree.SetFlags((SHCONTF)(SHCONTF_FOLDERS)); //显示文件夹 m_tree.Expand(m_tree.GetRootItem(), TVE_EXPAND); m_tree.SetRelatedList(&m_list);
void CFileRenameDlg::OnBnClickedOk() { UpdateData(TRUE); CString str; //获取是否进行递归的按钮 isChecked =((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck(); int flag=AfxMessageBox("确定批量更改文件名?",MB_OKCANCEL); if (flag==IDCANCEL ) { return; } //获取当前List的目录 m_list.GetCurrentFolder(str); //文件重命名 renameFiles(str); //刷新List Control的内容,这样修改完毕后就可以在界面上看到效果 m_list.Refresh(); //OnOK(); }
bool CFileRenameDlg::renameFiles(CString basePath) { CFileFind finder; CString szPath=CString(basePath) + "\\"+m_sourcePath; bool bPrefix=m_sourcePath.Find('.')==-1?false:true;//判断文件中是否指定'.',如果没有指定,表示要修改那么没有后缀名的文件 CString desExt=m_desPath.Right(m_desPath.GetLength()-m_desPath.ReverseFind('.')-1);//获取.后缀 bool bDes=m_desPath.Find('.')==-1?false:true;//判断修改后的文件中是否有后缀 BOOL bFind=finder.FindFile(szPath); while(bFind) { bFind=finder.FindNextFile(); //如果不是目录 if (!(finder.IsDirectory()||finder.IsDots())) { //获取当前文件的文件名和后缀 CString oldName,oldTitle; oldName=finder.GetFileName(); oldTitle=finder.GetFileTitle(); bool bOld=oldName.Find('.')==-1?false:true;//判断当前遍历的文件是否有后缀 //1.如果源文件没有指定后缀并且当前遍历的文件也有没有后缀,那么进行更改 //2.源文件有后缀名并且匹配 if (!bPrefix&&!bOld||bPrefix) { try { //如果修改后的文件有后缀 if(bDes) CFile::Rename(basePath+"\\"+oldName,basePath+"\\"+oldTitle+"."+desExt); else//如果修改后的文件没有后缀 CFile::Rename(basePath+"\\"+oldName,basePath+"\\"+oldTitle); } catch (CFileException* e) { } } } } //递归遍历文件夹并修改文件夹内符合条件的文件 szPath=CString(basePath) + "\\*.*"; bFind=finder.FindFile(szPath); while(bFind) { bFind = finder.FindNextFile(); if (finder.IsDirectory()&&!finder.IsDots()&&isChecked)//注意该句需要排除“.”“..” { renameFiles(basePath+"\\"+finder.GetFileTitle()+"\\");//注意这里不能是直接使用GetFileUrl函数 } } finder.Close(); return true; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:文 文件批量重命名 cmfcshelllistctrl
原文地址:http://blog.csdn.net/u012501459/article/details/47836451