自己动手编程实现文件批量重命名
2011-04-29 09:54
459 查看
最近用BT下电视剧,每一集的视频文件的文件名都被加上了那个网站的地址,显得非常的杂乱无章,还有在网上下图片的时候,文件名也会非常乱,手动修改的话非常费时费力,于是动手写了一个自动化的工具,反正下TVB的剧集是我的嗜好嘛~~~
程序运行效果图:
下面还是贴源码吧,有部分源码是由MFC框架自动生成的:
程序运行效果图:
下面还是贴源码吧,有部分源码是由MFC框架自动生成的:
/****************************************************************************************** *FileName:ReNameDlg.h *Author:Swtar *Date:2011-4-8 *******************************************************************************************/ #if !defined(AFX_RENAMEDLG_H__66D0A503_8786_45F8_9B75_40A4D9A3081C__INCLUDED_) #define AFX_RENAMEDLG_H__66D0A503_8786_45F8_9B75_40A4D9A3081C__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif class CReNameDlg : public CDialog { public: CReNameDlg(CWnd* pParent = NULL); //声明控件操纵函数 void ControlControler(BOOL bOp); //MFC自动生成的数据映射 enum { IDD = IDD_RENAME_DIALOG }; CButton m_cancel; CButton m_ok; CEdit m_kzmct; CButton m_browser; CSpinButtonCtrl m_spin; CString m_directory; CString m_kzm; int m_start; protected: virtual void DoDataExchange(CDataExchange* pDX); protected: HICON m_hIcon; virtual BOOL OnInitDialog(); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); afx_msg void OnBrowser(); virtual void OnOK(); virtual void OnCancel(); DECLARE_MESSAGE_MAP() }; #endif /****************************************************************************************** *FileName:ReNameDlg.cpp *Author:Swtar *Date:2011-4-8 *******************************************************************************************/ #include "stdafx.h" #include "ReName.h" #include "ReNameDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif CReNameDlg::CReNameDlg(CWnd* pParent /*=NULL*/) : CDialog(CReNameDlg::IDD, pParent) { m_directory = _T(""); m_kzm = _T(""); m_start = 0; m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CReNameDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDCANCEL, m_cancel); DDX_Control(pDX, IDOK, m_ok); DDX_Control(pDX, IDC_KZM, m_kzmct); DDX_Control(pDX, IDC_BROWSER, m_browser); DDX_Control(pDX, IDC_SPIN1, m_spin); DDX_Text(pDX, IDC_DIRECTORY, m_directory); DDX_Text(pDX, IDC_KZM, m_kzm); DDX_Text(pDX, IDC_START, m_start); } BEGIN_MESSAGE_MAP(CReNameDlg, CDialog) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BROWSER, OnBrowser) END_MESSAGE_MAP() BOOL CReNameDlg::OnInitDialog() { CDialog::OnInitDialog(); SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE); //初始化控件及数据 m_browser.SetWindowText("浏览..."); CEdit *StartNum=(CEdit*)GetDlgItem(IDC_START); m_spin.SetBuddy(StartNum); m_spin.SetPos(1); m_spin.SetRange(1,255); m_spin.SetBase(1); m_kzm="rmvb"; m_start=1; //更新映射 UpdateData(0); return TRUE; } void CReNameDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } HCURSOR CReNameDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } //浏览文件夹 void CReNameDlg::OnBrowser() { CHAR szPath[MAX_PATH] = {0}; BROWSEINFO browsInfo; IMalloc *pDllMlc; LPCITEMIDLIST pidlFolder; browsInfo.hwndOwner = m_hWnd; browsInfo.pidlRoot = NULL; browsInfo.pszDisplayName = NULL; browsInfo.lpszTitle = "选择文件夹"; browsInfo.ulFlags = BIF_RETURNONLYFSDIRS; browsInfo.lpfn = NULL; browsInfo.lParam = NULL; browsInfo.iImage = 0; if(SUCCEEDED(SHGetMalloc(&pDllMlc))) { pidlFolder=SHBrowseForFolder(&browsInfo); if(NULL != pidlFolder) { SHGetPathFromIDList(pidlFolder, (CHAR*)szPath); m_directory = szPath; UpdateData(FALSE); } pDllMlc->Free(NULL); pDllMlc->Release(); } } //开始执行批量重命名操作 void CReNameDlg::OnOK() { if(m_directory.IsEmpty()||m_kzm.IsEmpty()||m_start<0) { MessageBox("请提供完整的信息!","提示",MB_OK|MB_ICONSTOP); return; } ControlControler(FALSE); CString szFileName(""); CString szAllFile("//*."); UpdateData(); CString szFindDirectory=m_directory+szAllFile+m_kzm; CString szOldName,szNewName; DWORD dwThreadID(0); HANDLE hFile; WIN32_FIND_DATA stWfd; int iIsTheLastFile=0; ZeroMemory(&stWfd,sizeof(WIN32_FIND_DATA)); hFile=FindFirstFile(szFindDirectory,&stWfd); do { if(stWfd.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY) continue; szOldName.Format("%s//%s",m_directory,stWfd.cFileName); szNewName.Format("%s//%d.%s",m_directory,m_start,m_kzm); m_start++; MoveFile(szOldName,szNewName); iIsTheLastFile=FindNextFile(hFile,&stWfd); } while(iIsTheLastFile); FindClose(hFile); MessageBox("批量重命名成功!","提示",MB_OK|MB_ICONINFORMATION); ControlControler(TRUE); } //退出程序 void CReNameDlg::OnCancel() { CDialog::OnCancel(); } //操纵控件状态 void CReNameDlg::ControlControler(BOOL bOp) { if(bOp) { m_directory.Empty(); m_start=1; } m_browser.EnableWindow(bOp); m_spin.EnableWindow(bOp); m_kzmct.EnableWindow(bOp); m_ok.EnableWindow(bOp); m_cancel.EnableWindow(bOp); UpdateData(0); }
相关文章推荐
- 自己实现的验证码类
- 自定义CheckBox,用自己的方式来实现个性勾选。checkbox与button的联动。
- [置顶] Android中高仿快牙实现Socket列表的展示,获取安卓手机系统安装的应用和自己安装的应用相关信息
- 自己实现spring的注解扫描处理功能
- 楼主最近遇到一个需求就在在ext 框架里实现右下角弹框提示,就自己动手做了一个
- js实现自己定义鼠标右键-------Day45
- effectiveC++之自己实现copy函数的注意事项
- 自己实现一个数据库连接池
- 自己实现HTML-Beautify
- 写一个自己的Spring框架——简单实现IoC容器功能
- 使用Java进行微信开发 2 - 实现微信与自己的服务器的互联
- linux signal 实现自己程序示例
- .Net 配置文件——继承ConfigurationSection实现自己定义处理类处理自己定义配置节点
- strstr函数的自己实现
- 如何实现自己的Android MVP框架?
- C++----自己实现的链表
- 自己实现GetProcAddress
- 自己动手实现jQuery Callbacks完整功能代码详解
- c语言:实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定
- javascript原型-自己实现each方法遍历多维数组(2)