findfile.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /************************************************************************/
  2. /* Copyright (C), 2016-2020, [IT], 保留所有权利;
  3. /* 模 块 名:;
  4. /* 描 述:;
  5. /*
  6. /* 版 本:[V];
  7. /* 作 者:[IT];
  8. /* 日 期:[12/22/2016];
  9. /*
  10. /*
  11. /* 注 意:;
  12. /*
  13. /* 修改记录:[IT];
  14. /* 修改日期:;
  15. /* 修改版本:;
  16. /* 修改内容:;
  17. /************************************************************************/
  18. #ifndef __FIND_FILE_20151003__
  19. #define __FIND_FILE_20151003__
  20. #include <string>
  21. #include <vector>
  22. using namespace std;
  23. #ifndef _UNICODE
  24. typedef string TString;
  25. #else
  26. typedef wstring TString;
  27. #endif
  28. typedef vector<TString> STR_VEC;
  29. #pragma once
  30. class findfile
  31. {
  32. public:
  33. findfile(void);
  34. virtual ~findfile(void);
  35. //protected:
  36. public:
  37. INT m_nlimit;
  38. STR_VEC m_vtEffctExt;
  39. STR_VEC *m_pvtfiles;
  40. STR_VEC *m_pvtnames;
  41. STR_VEC *m_pvtfolders;
  42. STR_VEC *m_pvtfiles_sth; // s小图;
  43. STR_VEC *m_pvtfiles_mth; // m小图;
  44. public:
  45. static BOOL iscorrectext(IN const TString &fext, OUT TString* lpMistakenExt = NULL);
  46. // lowercase和uppercase在多字节下生僻字会出问题(珺、琤,珺转小写会变成琤,反过来琤转大写会变成珺);已修改;
  47. static TString lowercase(IN const TString &Str);
  48. static void lowercase(IN TString& str);
  49. static TString uppercase(IN const TString &Str);
  50. static void uppercase(IN TString& str);
  51. //static int match(IN CONST TString &sExt, IN CONST TString &sFile);
  52. static inline int findfile::match(IN CONST TString &strExt, IN CONST TString &strfile)
  53. {
  54. int pos = strfile.find_last_of(_T('.'));
  55. if (TString::npos != pos)
  56. return !_tcsicmp(strExt.c_str(), strfile.substr(pos).c_str());
  57. return FALSE;
  58. }
  59. static TString getfilename(IN CONST TString &file);
  60. protected:
  61. INT getlimit() const { return m_nlimit; }
  62. void setlimit(IN CONST INT &nlimit);
  63. void groupExt();
  64. void groupExt( IN CONST TString &exts, IN STR_VEC &vtExts );
  65. inline INT checklimit() { return m_pvtfiles->size() == getlimit(); }
  66. BOOL IsaDirectory(CONST TString &sDirectory) { return (FILE_ATTRIBUTE_DIRECTORY == GetFileAttributes(sDirectory.c_str())); }
  67. public:
  68. // 查找所有文件,包括子文件夹名、文件名、文件路径;
  69. void findall(IN CONST TString& folder);
  70. // 只返回2级子目录名(测试ok);
  71. void findsubfolder(IN CONST TString& folder);
  72. // 只返回所有子目录名(测试ok);
  73. void findallsubfolder(IN CONST TString& folder);
  74. // 查找文件路径,以及查找子目录的文件路径,但不获取子目录名(测试ok);
  75. void findfiles_findin_subfolder(IN CONST TString& folder);
  76. // 查找文件路径,不查找子目录的文件(测试ok);
  77. void findfiles_findout_subfolder(IN CONST TString& folder);
  78. // 查找文件路径,以及查找子目录的文件路径,同时获取子目录名(测试ok);
  79. void findfiles_within_subfolder(IN CONST TString& folder);
  80. // 查找文件名称,以及查找子目录的文件名称,但不获取子目录名(返回的文件包含扩展名)(测试ok);
  81. void findnames_findin_subfolder(IN CONST TString& folder);
  82. // 查找文件名称,不查找子目录的文件(返回的文件包含扩展名)(测试ok);
  83. void findnames_findout_subfolder(IN CONST TString& folder);
  84. // 查找文件名称,以及查找子目录的文件名称,同时获取子目录名(返回的文件包含扩展名)(测试ok);
  85. void findnames_within_subfolder(IN CONST TString& folder);
  86. // 查找文件路径和文件名,以及查找子目录的文件路径和文件名,但不获取子目录名;(返回的文件包含扩展名)(测试ok);
  87. void findfilesnames_findin_subfolder(IN CONST TString& folder);
  88. // 查找文件路径和文件名,不查找子目录;(返回的文件包含扩展名)(测试ok);
  89. void findfilesnames_findout_subfolder(IN CONST TString& folder);
  90. // 查找文件路径和文件名,以及查找子目录的文件路径和文件名,且获取子目录名;(返回的文件包含扩展名)(测试ok);
  91. void findfilesnames_within_subfolder(IN CONST TString& folder);
  92. };
  93. #endif