findfile.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #ifndef __FIND_FILE_20150819__
  2. #define __FIND_FILE_20150819__
  3. #include "basetype.h"
  4. #pragma once
  5. namespace filekernel
  6. {
  7. // 查找文件的最大数量限制在nMaxLimit;
  8. CONST UINT64 nMaxLimit = 0x100000; //--1048576
  9. // 查找文件的默认数量限制在nDefLimit;
  10. CONST UINT64 nDefLimit = 0x10000; //--65536
  11. // 路径分隔符;
  12. CONST TCHAR c_pathSeparator = _T('\\');
  13. CONST TString s_pathSeparator = _T("\\");
  14. CONST TString g_sVertical = _T("|");
  15. // 正确的扩展名及格式样列;
  16. // 这个值最好可以从配置文件ini或xml中获取,不用在代码里写死;
  17. CONST TString g_sCorrectExt = _T("*.jpg|*.jpeg|*.png|*.bmp|*.cr2|*.nef|*.raw");
  18. class AFX_CLASS_EXPORT findfile
  19. {
  20. public:
  21. findfile(void);
  22. virtual ~findfile(void);
  23. protected:
  24. INT m_nlimit;
  25. STR_VEC *m_pvtfiles;
  26. STR_VEC *m_pvtnames;
  27. STR_VEC *m_pvtfolders;
  28. STR_VEC *m_pvtnames_noext;
  29. public:
  30. static BOOL iscorrectext(IN const TString &fext, OUT TString* lpMistakenExt = NULL);
  31. static TString lowercase(IN const TString &Str);
  32. static void lowercase(IN TString& str);
  33. static TString uppercase(IN const TString &Str);
  34. static void uppercase(IN TString& str);
  35. static int match(IN CONST TString &sExt, IN CONST TString &sFile);
  36. static void keepdownext(IN CONST TString &keepExt, IN STR_VEC &vtfiles);
  37. static void keepoutext(IN CONST TString &removeext, IN STR_VEC &vtfiles);
  38. static void subgroupExt(IN CONST TString &ext1, IN STR_VEC &vt1, IN CONST TString &ext2, IN STR_VEC &vt2); // 分组扩展名;
  39. static TString getfilename(IN CONST TString &file);
  40. protected:
  41. INT getlimit() const { return m_nlimit; }
  42. void setlimit(IN CONST INT &nlimit);
  43. inline INT checklimit() { return m_pvtfiles->size() == getlimit(); }
  44. BOOL IsaDirectory(CONST TString &sDirectory) { return (FILE_ATTRIBUTE_DIRECTORY == GetFileAttributes(sDirectory.c_str())); }
  45. // 查找所有文件,包括子文件夹名、文件名、文件路径;
  46. void findall(IN CONST TString& folder, IN CONST TString& findext);
  47. // 只返回2级子目录名;
  48. void findsubfolder(IN CONST TString& folder);
  49. // 只返回所有子目录名;
  50. void findallsubfolder(IN CONST TString& folder);
  51. // 查找文件路径,以及查找子目录的文件路径,但不获取子目录名;
  52. void findfiles_findin_subfolder(IN CONST TString& folder, IN CONST TString& findext);
  53. // 查找文件路径,不查找子目录的文件;
  54. void findfiles_findout_subfolder(IN CONST TString& folder, IN CONST TString& findext);
  55. // 查找文件路径,以及查找子目录的文件路径,同时获取子目录名;
  56. void findfiles_within_subfolder(IN CONST TString& folder, IN CONST TString& findext);
  57. // 查找文件名称,以及查找子目录的文件名称,但不获取子目录名(包含扩展名);
  58. void findnames_findin_subfolder(IN CONST TString& folder, IN CONST TString& findext);
  59. // 查找文件名称,不查找子目录的文件(包含扩展名);
  60. void findnames_findout_subfolder(IN CONST TString& folder, IN CONST TString& findext);
  61. // 查找文件名称,以及查找子目录的文件名称,同时获取子目录名(包含扩展名);
  62. void findnames_within_subfolder(IN CONST TString& folder, IN CONST TString& findext);
  63. // 查找文件名称,以及查找子目录的文件名称,但不获取子目录名(不含扩展名);
  64. void findnames_findin_subfolder_ex(IN CONST TString& folder, IN CONST TString& findext);
  65. // 查找文件名称,不查找子目录的文件(不含扩展名);
  66. void findnames_findout_subfolder_ex(IN CONST TString& folder, IN CONST TString& findext);
  67. // 查找文件名称,以及查找子目录的文件名称,同时获取子目录名(不含扩展名);
  68. void findnames_within_subfolder_ex(IN CONST TString& folder, IN CONST TString& findext);
  69. // 查找文件路径和文件名,以及查找子目录的文件路径和文件名,但不获取子目录名;(包含扩展名);
  70. void findfilesnames_findin_subfolder(IN CONST TString& folder, IN CONST TString& findext);
  71. // 查找文件路径和文件名,不查找子目录;(包含扩展名);
  72. void findfilesnames_findout_subfolder(IN CONST TString& folder, IN CONST TString& findext);
  73. // 查找文件路径和文件名,以及查找子目录的文件路径和文件名,且获取子目录名;(包含扩展名);
  74. void findfilesnames_within_subfolder(IN CONST TString& folder, IN CONST TString& findext);
  75. // 查找文件路径和文件名,以及查找子目录的文件路径和文件名,但不获取子目录名(不含扩展名);
  76. void findfilesnames_findin_subfolder_ex(IN CONST TString& folder, IN CONST TString& findext);
  77. // 查找文件路径和文件名,不查找子目录(不含扩展名);
  78. void findfilesnames_findout_subfolder_ex(IN CONST TString& folder, IN CONST TString& findext);
  79. // 查找文件路径和文件名,以及查找子目录的文件路径和文件名,且获取子目录名(不含扩展名);
  80. void findfilesnames_within_subfolder_ex(IN CONST TString& folder, IN CONST TString& findext);
  81. };
  82. };
  83. #endif