#ifndef __FIND_FILE_20150819__ #define __FIND_FILE_20150819__ #include "basetype.h" #pragma once namespace filekernel { // 查找文件的最大数量限制在nMaxLimit; CONST UINT64 nMaxLimit = 0x100000; //--1048576 // 查找文件的默认数量限制在nDefLimit; CONST UINT64 nDefLimit = 0x10000; //--65536 // 路径分隔符; CONST TCHAR c_pathSeparator = _T('\\'); CONST TString s_pathSeparator = _T("\\"); CONST TString g_sVertical = _T("|"); // 正确的扩展名及格式样列; // 这个值最好可以从配置文件ini或xml中获取,不用在代码里写死; CONST TString g_sCorrectExt = _T("*.jpg|*.jpeg|*.png|*.bmp|*.cr2|*.nef|*.raw"); class AFX_CLASS_EXPORT findfile { public: findfile(void); virtual ~findfile(void); protected: INT m_nlimit; STR_VEC *m_pvtfiles; STR_VEC *m_pvtnames; STR_VEC *m_pvtfolders; STR_VEC *m_pvtnames_noext; public: static BOOL iscorrectext(IN const TString &fext, OUT TString* lpMistakenExt = NULL); static TString lowercase(IN const TString &Str); static void lowercase(IN TString& str); static TString uppercase(IN const TString &Str); static void uppercase(IN TString& str); static int match(IN CONST TString &sExt, IN CONST TString &sFile); static void keepdownext(IN CONST TString &keepExt, IN STR_VEC &vtfiles); static void keepoutext(IN CONST TString &removeext, IN STR_VEC &vtfiles); static void subgroupExt(IN CONST TString &ext1, IN STR_VEC &vt1, IN CONST TString &ext2, IN STR_VEC &vt2); // 分组扩展名; static TString getfilename(IN CONST TString &file); protected: INT getlimit() const { return m_nlimit; } void setlimit(IN CONST INT &nlimit); inline INT checklimit() { return m_pvtfiles->size() == getlimit(); } BOOL IsaDirectory(CONST TString &sDirectory) { return (FILE_ATTRIBUTE_DIRECTORY == GetFileAttributes(sDirectory.c_str())); } // 查找所有文件,包括子文件夹名、文件名、文件路径; void findall(IN CONST TString& folder, IN CONST TString& findext); // 只返回2级子目录名; void findsubfolder(IN CONST TString& folder); // 只返回所有子目录名; void findallsubfolder(IN CONST TString& folder); // 查找文件路径,以及查找子目录的文件路径,但不获取子目录名; void findfiles_findin_subfolder(IN CONST TString& folder, IN CONST TString& findext); // 查找文件路径,不查找子目录的文件; void findfiles_findout_subfolder(IN CONST TString& folder, IN CONST TString& findext); // 查找文件路径,以及查找子目录的文件路径,同时获取子目录名; void findfiles_within_subfolder(IN CONST TString& folder, IN CONST TString& findext); // 查找文件名称,以及查找子目录的文件名称,但不获取子目录名(包含扩展名); void findnames_findin_subfolder(IN CONST TString& folder, IN CONST TString& findext); // 查找文件名称,不查找子目录的文件(包含扩展名); void findnames_findout_subfolder(IN CONST TString& folder, IN CONST TString& findext); // 查找文件名称,以及查找子目录的文件名称,同时获取子目录名(包含扩展名); void findnames_within_subfolder(IN CONST TString& folder, IN CONST TString& findext); // 查找文件名称,以及查找子目录的文件名称,但不获取子目录名(不含扩展名); void findnames_findin_subfolder_ex(IN CONST TString& folder, IN CONST TString& findext); // 查找文件名称,不查找子目录的文件(不含扩展名); void findnames_findout_subfolder_ex(IN CONST TString& folder, IN CONST TString& findext); // 查找文件名称,以及查找子目录的文件名称,同时获取子目录名(不含扩展名); void findnames_within_subfolder_ex(IN CONST TString& folder, IN CONST TString& findext); // 查找文件路径和文件名,以及查找子目录的文件路径和文件名,但不获取子目录名;(包含扩展名); void findfilesnames_findin_subfolder(IN CONST TString& folder, IN CONST TString& findext); // 查找文件路径和文件名,不查找子目录;(包含扩展名); void findfilesnames_findout_subfolder(IN CONST TString& folder, IN CONST TString& findext); // 查找文件路径和文件名,以及查找子目录的文件路径和文件名,且获取子目录名;(包含扩展名); void findfilesnames_within_subfolder(IN CONST TString& folder, IN CONST TString& findext); // 查找文件路径和文件名,以及查找子目录的文件路径和文件名,但不获取子目录名(不含扩展名); void findfilesnames_findin_subfolder_ex(IN CONST TString& folder, IN CONST TString& findext); // 查找文件路径和文件名,不查找子目录(不含扩展名); void findfilesnames_findout_subfolder_ex(IN CONST TString& folder, IN CONST TString& findext); // 查找文件路径和文件名,以及查找子目录的文件路径和文件名,且获取子目录名(不含扩展名); void findfilesnames_within_subfolder_ex(IN CONST TString& folder, IN CONST TString& findext); }; }; #endif