/************************************************************************/ /* Copyright (C), 2016-2020, [IT], 保留所有权利; /* 模 块 名:; /* 描 述:; /* /* 版 本:[V]; /* 作 者:[IT]; /* 日 期:[12/22/2016]; /* /* /* 注 意:; /* /* 修改记录:[IT]; /* 修改日期:; /* 修改版本:; /* 修改内容:; /************************************************************************/ #ifndef __FILEHELPING_20150818__ #define __FILEHELPING_20150818__ #pragma once #include "findfile.h" #define USE_IMGEXT 0 class filehelpImpl :public findfile { public: filehelpImpl(void); ~filehelpImpl(void); public: // 排序或乱序; static void random(IN STR_VEC& vtContent, IN BOOL bSort = TRUE); // 分隔数组; static void split(OUT vector& vtSplit, IN const TString str, IN const TString strSplit); // 根据后缀名保留文件; static void keepdownbyext(IN const TString &keepExt, IN STR_VEC &vtfiles); static void keepdownbyext(IN const TString &keepExt, IN const STR_VEC &vtfiles, OUT STR_VEC &vtresult); // 根据后缀名移除文件; static void keepoutbyext(IN const TString &removeext, IN STR_VEC &vtfiles); static void keepoutbyext(IN const TString &removeext, IN const STR_VEC &vtfiles, OUT STR_VEC &vtresult); // 保留指定文件名(有后缀的:001.jpg)的文件路径; void keepdowbyname(IN const STR_VEC &vtnames); static void keepdowbyname(IN const STR_VEC &vtnames, IN STR_VEC &vtfiles); static void keepdowbyname(IN const STR_VEC &vtnames, IN const STR_VEC &vtfiles, OUT STR_VEC &vt_result); // 保留指定文件名(无后缀的:001)的文件路径; void keepdowbyname_noext(IN const STR_VEC &vtnames); static void keepdowbyname_noext(IN const STR_VEC &vtnames, IN STR_VEC &vtfiles); static void keepdowbyname_noext(IN const STR_VEC &vtnames, IN const STR_VEC &vtfiles, OUT STR_VEC &vt_result); // 分组扩展名; static void subgroupExt(IN const TString &ext1, IN STR_VEC &vt1, IN const TString &ext2, IN STR_VEC &vt2); // 根据有后缀的文件名(如:001.jpg)来过虑文件; static void filterbyname(IN STR_VEC &vtfiles, IN const STR_VEC &vtnames); void filterbyname(IN const STR_VEC &vtnames); // 根据无后缀的文件名(如:001)来过虑文件; static void filterbyname_noext(IN STR_VEC &vtfiles, IN const STR_VEC &vtnames); void filterbyname_noext(IN const STR_VEC &vtnames); // 获取文件名,带后缀名(如:001.jpg); inline void getnames(IN STR_VEC &vtfiles, IN STR_VEC &vtnames) { INT nIndex = 0; for ( STR_VEC::iterator it = vtfiles.begin(); it != vtfiles.end(); it++ ) { if ( (nIndex = it->find_last_of(_T('\\'))) != TString::npos ) { vtnames.push_back(it->substr(nIndex+1)); } } } // 获取文件名,不带后缀名(如:001); inline void getnames_noext(IN const STR_VEC &vtfiles, IN STR_VEC &vtnames) { INT nIndex = 0; INT nIndex2 = 0; for ( STR_VEC::const_iterator it = vtfiles.begin(); it != vtfiles.end(); it++ ) { if ( (nIndex = it->find_last_of(_T('\\'))) != TString::npos ) { if ( (nIndex2 = it->find_last_of(_T('.'))) != TString::npos) { if ( nIndex2 > nIndex) vtnames.push_back(it->substr(nIndex+1, nIndex2-nIndex)); } } else {// vtfiles是没有目录的文件名,如:001.jpg; if ( (nIndex2 = it->find_last_of(_T('.'))) != TString::npos) { vtnames.push_back(it->substr(0, nIndex2)); } } } } public: // 查找全部; BOOL getall( IN LPCTSTR lpfolder, // 要查找的目录; IN LPCTSTR lpfindext, // 要查找的扩展名; IN OUT STR_VEC *pvtfiles, // 返回要查找的文件全名; IN OUT STR_VEC *pvtnames, // 返回要查找的文件名(无路径,包含扩展名); IN OUT STR_VEC *pvtfolders // 返回要查找的子目录; ); // 只获取当前要目录的子文件夹,不获取子文件夹中的文件夹; BOOL getsubfolder( IN LPCTSTR lpfolder, // 要查找的目录; IN STR_VEC *pvtfolders // 返回子文件夹; ); BOOL getallsubfolder( IN LPCTSTR lpfolder, // 要查找的目录; IN STR_VEC *pvtfolders // 返回所有子文件夹; ); ////////////////////////////////////////////////////////////////////////// BOOL getfiles_findin_subfolder( IN LPCTSTR lpfolder, // 要查找的目录; IN LPCTSTR lpfindext, // 要查找的扩展名; IN STR_VEC *pvtfiles // 返回要查找的文件全名; ); BOOL getfiles_findout_subfolder( IN LPCTSTR lpfolder, // 要查找的目录; IN LPCTSTR lpfindext, // 要查找的扩展名; IN OUT STR_VEC *pvtfiles // 返回要查找的文件全名; ); BOOL getfiles_within_subfolder( IN LPCTSTR lpfolder, // 要查找的目录; IN LPCTSTR lpfindext, // 要查找的扩展名; IN STR_VEC *pvtfiles, // 返回要查找的文件全名; IN STR_VEC *pvtfolders // 文件夹; ); ////////////////////////////////////////////////////////////////////////// virtual BOOL getfiles_bynames_findin_subfolder( IN LPCTSTR lpfolder, // 要查找的目录; IN LPCTSTR lpfindext, // 要查找的扩展名; IN STR_VEC &vtnames, IN STR_VEC *pvtfiles // 返回要查找的文件全名; ); virtual BOOL getfiles_bynames_findout_subfolder( IN LPCTSTR lpfolder, // 要查找的目录; IN LPCTSTR lpfindext, // 要查找的扩展名; IN STR_VEC &vtnames, IN OUT STR_VEC *pvtfiles // 返回要查找的文件全名; ) ; virtual BOOL getfiles_bynames_within_subfolder( IN LPCTSTR lpfolder, // 要查找的目录; IN LPCTSTR lpfindext, // 要查找的扩展名; IN STR_VEC &vtnames, IN STR_VEC *pvtfiles, // 返回要查找的文件全名; IN STR_VEC *pvtfolders // 文件夹; ) ; ////////////////////////////////////////////////////////////////////////// BOOL getnames_findin_subfolder( IN LPCTSTR lpfolder, // 要查找的目录; IN LPCTSTR lpfindext, // 要查找的扩展名; IN STR_VEC *pvtnames // 返回要查找的文件名(无路径,包含扩展名); ); BOOL getnames_findout_subfolder( IN LPCTSTR lpfolder, // 要查找的目录; IN LPCTSTR lpfindext, // 要查找的扩展名; IN STR_VEC *pvtnames // 返回要查找的文件名(无路径,包含扩展名); ); BOOL getnames_within_subfolder( IN LPCTSTR lpfolder, // 要查找的目录; IN LPCTSTR lpfindext, // 要查找的扩展名; IN STR_VEC *pvtnames, // 返回要查找的文件全名; IN STR_VEC *pvtfolders // 文件夹; ); ////////////////////////////////////////////////////////////////////////// BOOL getfilesnames_findin_subfolder( IN LPCTSTR lpfolder, // 要查找的目录; IN LPCTSTR lpfindext, // 要查找的扩展名; IN STR_VEC *pvtfiles, // 返回要查找的文件全名; IN STR_VEC *pvtnames // 返回要查找的文件名(无路径,包含扩展名); ); BOOL getfilesnames_findout_subfolder( IN LPCTSTR lpfolder, // 要查找的目录; IN LPCTSTR lpfindext, // 要查找的扩展名; IN STR_VEC *pvtfiles, // 返回要查找的文件全名; IN STR_VEC *pvtnames // 返回要查找的文件名(无路径,包含扩展名); ); BOOL getfilesnames_within_subfolder( IN LPCTSTR lpfolder, // 要查找的目录; IN LPCTSTR lpfindext, // 要查找的扩展名; IN STR_VEC *pvtfiles, // 返回要查找的文件全名; IN STR_VEC *pvtnames, // 返回要查找的文件名(无路径,包含扩展名); IN STR_VEC *pvtfolders // 文件夹; ); public: ////////////////////////////////////////////////////////////////////////// BOOL comparename_findin_names(IN LPCTSTR name); // 两个文件对比,是否同名; BOOL comparename_2file( IN LPCTSTR file1, // 文件1(全路径); IN LPCTSTR file2 // 文件2(全路径); ); // 指定文件名,与一组文件名对比; BOOL comparename_findin_names( IN LPCTSTR name, // 文件名(无路径,不含扩展名); IN STR_VEC& vtnames // 一组文件名(无路径,不含扩展名); ); // 指定文件名,与一组文件对比; BOOL comparename_findin_files( IN LPCTSTR name, // 文件名(不含扩展名); IN STR_VEC& vtfiles // 一组文件(全路径); ); // 指定文件名,与一文件夹对比; BOOL comparename_findin_folder( IN LPCTSTR name, // 文件名(不含扩展名); IN LPCTSTR folder, // 文件夹; IN LPCTSTR findext, // 要查找的扩展名; IN BOOL bsubfolder // 是否查找文件夹内的子目录; ); ////////////////////////////////////////////////////////////////////////// // 指定一组文件名,与另一组文件名对比; INT comparenames_findin_names( IN STR_VEC vtSrcnames, // 指定的一组源文件名(无路径,不含扩展名); IN STR_VEC vtDesnames, // 指定的一组目标文件名(无路径,不含扩展名); OUT STR_VEC *pvtIsonym = NULL // 返回同名的文件名; ); // 指定一组文件名,与一组文件(全路径)对比; INT comparenames_findin_files( IN STR_VEC vtnames, // 指定的一组源文件名(无路径,不含扩展名); IN STR_VEC vtfiles, // 指定的一组目标文件(全路径); IN LPCTSTR findext, // 要查找的扩展名; OUT STR_VEC *pvtIsonym = NULL // 返回同名的文件名; ); // 指定的一组文件名,与一文件夹对比; INT comparenames_findin_folder( IN STR_VEC vtnames, // 指定的一组源文件名(无路径,不含扩展名); IN LPCTSTR folder, // 文件夹; IN BOOL bsubfolder, // 是否查找文件夹内的子目录; IN LPCTSTR findext, // 要查找的扩展名; OUT STR_VEC *pvtIsonym = NULL // 返回同名的文件名; ); ////////////////////////////////////////////////////////////////////////// // 指定一文件,与一组文件名对比; BOOL comparefile_findin_names( IN LPCTSTR file, // 文件1(全路径); IN STR_VEC& vtnames // 指定的一组文件名(无路径,不含扩展名) ); // 指定一文件,与一组文件对比; BOOL comparefile_findin_files( IN LPCTSTR file, // 文件(全路径); IN STR_VEC& vtfiles, // 指定的一组文件(全路径) IN LPCTSTR findext // 要查找的扩展名; ); // 指定一文件,与一文件夹对比; BOOL comparefile_findin_folder( IN LPCTSTR file, // 文件(全路径); IN LPCTSTR folder, // 文件夹; IN BOOL bsubfolder, // 是否查找子文件夹; IN LPCTSTR findext // 要查找的扩展名; ); ////////////////////////////////////////////////////////////////////////// // 指定一组文件,与另一组文件对比; INT comparefiles_findin_files( IN STR_VEC &vtfiles1, // 指定的一组源文件; IN STR_VEC &vtfiles2, // 指定的一组目标文件; IN LPCTSTR findext, // 要查找的扩展名; OUT STR_VEC *pvtIsonym = NULL // 返回同名的文件名; ); // 指定一组文件,与一文件夹对比; INT comparefiles_findin_folder( IN STR_VEC &vtfiles, // 指定的一组源文件; IN LPCTSTR folder, // 指定的文件夹; IN BOOL bsubfolder, // 是否查找子文件夹; IN LPCTSTR findext, // 要查找的扩展名; OUT STR_VEC *pvtIsonym = NULL // 返回同名的文件名; ); // 文件夹自我对比(所有子文件夹对比) INT comparefolderself( IN LPCTSTR folder, // 指定文件夹; IN LPCTSTR findext, // 要查找的扩展名; OUT STR_VEC *pvtIsonym = NULL // 返回同名的文件名; ); // 指定一文件夹,与另一文件夹对比; INT comparefolder_findin_folder( IN LPCTSTR folder1, // 指定源文件夹; IN LPCTSTR folder2, // 指定目标文件夹; IN BOOL bsubfolder, // 是否查找子文件夹; IN LPCTSTR findext, // 要查找的扩展名; OUT STR_VEC *pvtIsonym = NULL // 返回同名的文件名; ); }; #endif