MFC文件操作的笔记和关键,MMClassify

来源:互联网 发布:mac os固件验证失败 编辑:程序博客网 时间:2024/05/18 05:02

本人是个图片搜集的爱好这,gif,jpg,bmp,png等等都喜欢,还喜欢整个网页的图片过滤后整个保存下来

每每在暂存的目录下面都会有很多临时的图片,还要手动去分类,十分麻烦,所以写了个小程序,这里写一下注释和笔记。

功能:在//源目录 CString srcPath(_T("D:\\My Documents\\Downloads"));中的图片分类存放到以下的目录

//gif图片的目录 CString gifPath(_T("D:\\MxDownload\\My Picture\\gif"));
//普通图片的目录 CString picPath(_T("D:\\MxDownload\\My Picture\\unClassified"));
//文件夹里面的图片集的目标目录CString dirPath(_T("D:\\MxDownload\\temp"));

建立工程:是控制台然后添加MFC库支持,因为没有用图形化的部分,所以简化一点的好。

CWinApp theApp;using namespace std;//以防有同名的gif覆盖了void moveNoCover(CString srcPath, CString desDir){//从后面开始找\号,int nIndex = srcPath.ReverseFind('\\');//取得文件名CString strFileName = srcPath.Mid(nIndex + 1);//在目标文件夹寻找有这个文件名没有CFileFind tempFileFinder;while(tempFileFinder.FindFile(desDir + '\\' + strFileName)){//如果有的话,在最后一个.前面插入1nIndex = strFileName.ReverseFind('.');strFileName.Insert(nIndex, '1');//copyNoCover(srcPath,desDir);}//移动。因为已经绝不可能同名了。MoveFile(srcPath, desDir + '\\' + strFileName);}//控制台程序的入口int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]){//hardcode了一些文件目录,简化例子,反正是自己用而已。//源目录CString srcPath(_T("D:\\My Documents\\Downloads"));CString searchPath = srcPath + _T("\\*.*");//gif图片的目录CString gifPath(_T("D:\\MxDownload\\My Picture\\gif"));//普通图片的目录CString picPath(_T("D:\\MxDownload\\My Picture\\unClassified"));//文件夹里面的图片集的目标目录CString dirPath(_T("D:\\MxDownload\\temp"));//初始化CFileFinderCFileFind fileFinder;bool bFinished = fileFinder.FindFile(searchPath);while(bFinished){bFinished = fileFinder.FindNextFile();//如果是本级目录,可以查看dos关于目录的命令,不做处理if(fileFinder.IsDots())continue;//如果是文件夹,不作处理。后面再做处理if(fileFinder.IsDirectory())continue;//else all are files//get File's SuffixCString strFileName = fileFinder.GetFileName();int nIndex = strFileName.ReverseFind('.');CString strSuffix = strFileName.Mid(nIndex + 1);strSuffix.MakeLower();//gifif(strSuffix == _T("gif")){moveNoCover(fileFinder.GetFilePath(), gifPath);}//picif(strSuffix == _T("jpg") ||strSuffix ==_T("jpeg") ||strSuffix == _T("png") ||strSuffix == _T("bmp")){moveNoCover(fileFinder.GetFilePath(), picPath);}//dir。因为保存网页下来的图片全都是有个网页文件,配套一个文件夹存放图片的if(strSuffix == _T("htm") || strSuffix == _T("html")){//取得文件夹名字,还要创建目标目录,因为movefile函数只对文件,不会自己建立目录的。CreateDirectory(dirPath + '\\' + fileFinder.GetFileTitle() + _T("_files"), NULL);CFileFind tempFileFinder;BOOL isFinished = tempFileFinder.FindFile(srcPath + '\\' + fileFinder.GetFileTitle() + _T("_files\\*.*"));while(isFinished){isFinished = tempFileFinder.FindNextFile();//in this app, no dir。在预设环境下,不会有嵌套目录,所以也不会有递归if(tempFileFinder.IsDots())continue;//如果移动不成功,表示已经有了重复的,直接删除原图即可。if(!MoveFile(tempFileFinder.GetFilePath(), dirPath + '\\' + fileFinder.GetFileTitle() + _T("_files\\") + tempFileFinder.GetFileName()))DeleteFile(tempFileFinder.GetFilePath());}//最后要删除原来的目录RemoveDirectory(srcPath + '\\' + fileFinder.GetFileTitle() + _T("_files"));//把网页文件也移动过去if(!MoveFile(fileFinder.GetFilePath(), dirPath + '\\' + fileFinder.GetFileName()))DeleteFile(fileFinder.GetFilePath());}}return 0;}