标签:文 文件批量重命名 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