filehelp.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  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 __FILEHELPING_20150818__
  19. #define __FILEHELPING_20150818__
  20. #pragma once
  21. #include "findfile.h"
  22. #define USE_IMGEXT 0
  23. class filehelpImpl :public findfile
  24. {
  25. public:
  26. filehelpImpl(void);
  27. ~filehelpImpl(void);
  28. public:
  29. // 排序或乱序;
  30. static void random(IN STR_VEC& vtContent, IN BOOL bSort = TRUE);
  31. // 分隔数组;
  32. static void split(OUT vector<TString>& vtSplit, IN const TString str, IN const TString strSplit);
  33. // 根据后缀名保留文件;
  34. static void keepdownbyext(IN const TString &keepExt, IN STR_VEC &vtfiles);
  35. static void keepdownbyext(IN const TString &keepExt, IN const STR_VEC &vtfiles, OUT STR_VEC &vtresult);
  36. // 根据后缀名移除文件;
  37. static void keepoutbyext(IN const TString &removeext, IN STR_VEC &vtfiles);
  38. static void keepoutbyext(IN const TString &removeext, IN const STR_VEC &vtfiles, OUT STR_VEC &vtresult);
  39. // 保留指定文件名(有后缀的:001.jpg)的文件路径;
  40. void keepdowbyname(IN const STR_VEC &vtnames);
  41. static void keepdowbyname(IN const STR_VEC &vtnames, IN STR_VEC &vtfiles);
  42. static void keepdowbyname(IN const STR_VEC &vtnames, IN const STR_VEC &vtfiles, OUT STR_VEC &vt_result);
  43. // 保留指定文件名(无后缀的:001)的文件路径;
  44. void keepdowbyname_noext(IN const STR_VEC &vtnames);
  45. static void keepdowbyname_noext(IN const STR_VEC &vtnames, IN STR_VEC &vtfiles);
  46. static void keepdowbyname_noext(IN const STR_VEC &vtnames, IN const STR_VEC &vtfiles, OUT STR_VEC &vt_result);
  47. // 分组扩展名;
  48. static void subgroupExt(IN const TString &ext1, IN STR_VEC &vt1, IN const TString &ext2, IN STR_VEC &vt2);
  49. // 根据有后缀的文件名(如:001.jpg)来过虑文件;
  50. static void filterbyname(IN STR_VEC &vtfiles, IN const STR_VEC &vtnames);
  51. void filterbyname(IN const STR_VEC &vtnames);
  52. // 根据无后缀的文件名(如:001)来过虑文件;
  53. static void filterbyname_noext(IN STR_VEC &vtfiles, IN const STR_VEC &vtnames);
  54. void filterbyname_noext(IN const STR_VEC &vtnames);
  55. // 获取文件名,带后缀名(如:001.jpg);
  56. inline void getnames(IN STR_VEC &vtfiles, IN STR_VEC &vtnames)
  57. {
  58. INT nIndex = 0;
  59. for ( STR_VEC::iterator it = vtfiles.begin(); it != vtfiles.end(); it++ )
  60. {
  61. if ( (nIndex = it->find_last_of(_T('\\'))) != TString::npos )
  62. {
  63. vtnames.push_back(it->substr(nIndex+1));
  64. }
  65. }
  66. }
  67. // 获取文件名,不带后缀名(如:001);
  68. inline void getnames_noext(IN const STR_VEC &vtfiles, IN STR_VEC &vtnames)
  69. {
  70. INT nIndex = 0;
  71. INT nIndex2 = 0;
  72. for ( STR_VEC::const_iterator it = vtfiles.begin(); it != vtfiles.end(); it++ )
  73. {
  74. if ( (nIndex = it->find_last_of(_T('\\'))) != TString::npos )
  75. {
  76. if ( (nIndex2 = it->find_last_of(_T('.'))) != TString::npos)
  77. {
  78. if ( nIndex2 > nIndex)
  79. vtnames.push_back(it->substr(nIndex+1, nIndex2-nIndex));
  80. }
  81. }
  82. else
  83. {// vtfiles是没有目录的文件名,如:001.jpg;
  84. if ( (nIndex2 = it->find_last_of(_T('.'))) != TString::npos)
  85. {
  86. vtnames.push_back(it->substr(0, nIndex2));
  87. }
  88. }
  89. }
  90. }
  91. public:
  92. // 查找全部;
  93. BOOL getall(
  94. IN LPCTSTR lpfolder, // 要查找的目录;
  95. IN LPCTSTR lpfindext, // 要查找的扩展名;
  96. IN OUT STR_VEC *pvtfiles, // 返回要查找的文件全名;
  97. IN OUT STR_VEC *pvtnames, // 返回要查找的文件名(无路径,包含扩展名);
  98. IN OUT STR_VEC *pvtfolders // 返回要查找的子目录;
  99. );
  100. // 只获取当前要目录的子文件夹,不获取子文件夹中的文件夹;
  101. BOOL getsubfolder(
  102. IN LPCTSTR lpfolder, // 要查找的目录;
  103. IN STR_VEC *pvtfolders // 返回子文件夹;
  104. );
  105. BOOL getallsubfolder(
  106. IN LPCTSTR lpfolder, // 要查找的目录;
  107. IN STR_VEC *pvtfolders // 返回所有子文件夹;
  108. );
  109. //////////////////////////////////////////////////////////////////////////
  110. BOOL getfiles_findin_subfolder(
  111. IN LPCTSTR lpfolder, // 要查找的目录;
  112. IN LPCTSTR lpfindext, // 要查找的扩展名;
  113. IN STR_VEC *pvtfiles // 返回要查找的文件全名;
  114. );
  115. BOOL getfiles_findout_subfolder(
  116. IN LPCTSTR lpfolder, // 要查找的目录;
  117. IN LPCTSTR lpfindext, // 要查找的扩展名;
  118. IN OUT STR_VEC *pvtfiles // 返回要查找的文件全名;
  119. );
  120. BOOL getfiles_within_subfolder(
  121. IN LPCTSTR lpfolder, // 要查找的目录;
  122. IN LPCTSTR lpfindext, // 要查找的扩展名;
  123. IN STR_VEC *pvtfiles, // 返回要查找的文件全名;
  124. IN STR_VEC *pvtfolders // 文件夹;
  125. );
  126. //////////////////////////////////////////////////////////////////////////
  127. virtual BOOL getfiles_bynames_findin_subfolder(
  128. IN LPCTSTR lpfolder, // 要查找的目录;
  129. IN LPCTSTR lpfindext, // 要查找的扩展名;
  130. IN STR_VEC &vtnames,
  131. IN STR_VEC *pvtfiles // 返回要查找的文件全名;
  132. );
  133. virtual BOOL getfiles_bynames_findout_subfolder(
  134. IN LPCTSTR lpfolder, // 要查找的目录;
  135. IN LPCTSTR lpfindext, // 要查找的扩展名;
  136. IN STR_VEC &vtnames,
  137. IN OUT STR_VEC *pvtfiles // 返回要查找的文件全名;
  138. ) ;
  139. virtual BOOL getfiles_bynames_within_subfolder(
  140. IN LPCTSTR lpfolder, // 要查找的目录;
  141. IN LPCTSTR lpfindext, // 要查找的扩展名;
  142. IN STR_VEC &vtnames,
  143. IN STR_VEC *pvtfiles, // 返回要查找的文件全名;
  144. IN STR_VEC *pvtfolders // 文件夹;
  145. ) ;
  146. //////////////////////////////////////////////////////////////////////////
  147. BOOL getnames_findin_subfolder(
  148. IN LPCTSTR lpfolder, // 要查找的目录;
  149. IN LPCTSTR lpfindext, // 要查找的扩展名;
  150. IN STR_VEC *pvtnames // 返回要查找的文件名(无路径,包含扩展名);
  151. );
  152. BOOL getnames_findout_subfolder(
  153. IN LPCTSTR lpfolder, // 要查找的目录;
  154. IN LPCTSTR lpfindext, // 要查找的扩展名;
  155. IN STR_VEC *pvtnames // 返回要查找的文件名(无路径,包含扩展名);
  156. );
  157. BOOL getnames_within_subfolder(
  158. IN LPCTSTR lpfolder, // 要查找的目录;
  159. IN LPCTSTR lpfindext, // 要查找的扩展名;
  160. IN STR_VEC *pvtnames, // 返回要查找的文件全名;
  161. IN STR_VEC *pvtfolders // 文件夹;
  162. );
  163. //////////////////////////////////////////////////////////////////////////
  164. BOOL getfilesnames_findin_subfolder(
  165. IN LPCTSTR lpfolder, // 要查找的目录;
  166. IN LPCTSTR lpfindext, // 要查找的扩展名;
  167. IN STR_VEC *pvtfiles, // 返回要查找的文件全名;
  168. IN STR_VEC *pvtnames // 返回要查找的文件名(无路径,包含扩展名);
  169. );
  170. BOOL getfilesnames_findout_subfolder(
  171. IN LPCTSTR lpfolder, // 要查找的目录;
  172. IN LPCTSTR lpfindext, // 要查找的扩展名;
  173. IN STR_VEC *pvtfiles, // 返回要查找的文件全名;
  174. IN STR_VEC *pvtnames // 返回要查找的文件名(无路径,包含扩展名);
  175. );
  176. BOOL getfilesnames_within_subfolder(
  177. IN LPCTSTR lpfolder, // 要查找的目录;
  178. IN LPCTSTR lpfindext, // 要查找的扩展名;
  179. IN STR_VEC *pvtfiles, // 返回要查找的文件全名;
  180. IN STR_VEC *pvtnames, // 返回要查找的文件名(无路径,包含扩展名);
  181. IN STR_VEC *pvtfolders // 文件夹;
  182. );
  183. public:
  184. //////////////////////////////////////////////////////////////////////////
  185. BOOL comparename_findin_names(IN LPCTSTR name);
  186. // 两个文件对比,是否同名;
  187. BOOL comparename_2file(
  188. IN LPCTSTR file1, // 文件1(全路径);
  189. IN LPCTSTR file2 // 文件2(全路径);
  190. );
  191. // 指定文件名,与一组文件名对比;
  192. BOOL comparename_findin_names(
  193. IN LPCTSTR name, // 文件名(无路径,不含扩展名);
  194. IN STR_VEC& vtnames // 一组文件名(无路径,不含扩展名);
  195. );
  196. // 指定文件名,与一组文件对比;
  197. BOOL comparename_findin_files(
  198. IN LPCTSTR name, // 文件名(不含扩展名);
  199. IN STR_VEC& vtfiles // 一组文件(全路径);
  200. );
  201. // 指定文件名,与一文件夹对比;
  202. BOOL comparename_findin_folder(
  203. IN LPCTSTR name, // 文件名(不含扩展名);
  204. IN LPCTSTR folder, // 文件夹;
  205. IN LPCTSTR findext, // 要查找的扩展名;
  206. IN BOOL bsubfolder // 是否查找文件夹内的子目录;
  207. );
  208. //////////////////////////////////////////////////////////////////////////
  209. // 指定一组文件名,与另一组文件名对比;
  210. INT comparenames_findin_names(
  211. IN STR_VEC vtSrcnames, // 指定的一组源文件名(无路径,不含扩展名);
  212. IN STR_VEC vtDesnames, // 指定的一组目标文件名(无路径,不含扩展名);
  213. OUT STR_VEC *pvtIsonym = NULL // 返回同名的文件名;
  214. );
  215. // 指定一组文件名,与一组文件(全路径)对比;
  216. INT comparenames_findin_files(
  217. IN STR_VEC vtnames, // 指定的一组源文件名(无路径,不含扩展名);
  218. IN STR_VEC vtfiles, // 指定的一组目标文件(全路径);
  219. IN LPCTSTR findext, // 要查找的扩展名;
  220. OUT STR_VEC *pvtIsonym = NULL // 返回同名的文件名;
  221. );
  222. // 指定的一组文件名,与一文件夹对比;
  223. INT comparenames_findin_folder(
  224. IN STR_VEC vtnames, // 指定的一组源文件名(无路径,不含扩展名);
  225. IN LPCTSTR folder, // 文件夹;
  226. IN BOOL bsubfolder, // 是否查找文件夹内的子目录;
  227. IN LPCTSTR findext, // 要查找的扩展名;
  228. OUT STR_VEC *pvtIsonym = NULL // 返回同名的文件名;
  229. );
  230. //////////////////////////////////////////////////////////////////////////
  231. // 指定一文件,与一组文件名对比;
  232. BOOL comparefile_findin_names(
  233. IN LPCTSTR file, // 文件1(全路径);
  234. IN STR_VEC& vtnames // 指定的一组文件名(无路径,不含扩展名)
  235. );
  236. // 指定一文件,与一组文件对比;
  237. BOOL comparefile_findin_files(
  238. IN LPCTSTR file, // 文件(全路径);
  239. IN STR_VEC& vtfiles, // 指定的一组文件(全路径)
  240. IN LPCTSTR findext // 要查找的扩展名;
  241. );
  242. // 指定一文件,与一文件夹对比;
  243. BOOL comparefile_findin_folder(
  244. IN LPCTSTR file, // 文件(全路径);
  245. IN LPCTSTR folder, // 文件夹;
  246. IN BOOL bsubfolder, // 是否查找子文件夹;
  247. IN LPCTSTR findext // 要查找的扩展名;
  248. );
  249. //////////////////////////////////////////////////////////////////////////
  250. // 指定一组文件,与另一组文件对比;
  251. INT comparefiles_findin_files(
  252. IN STR_VEC &vtfiles1, // 指定的一组源文件;
  253. IN STR_VEC &vtfiles2, // 指定的一组目标文件;
  254. IN LPCTSTR findext, // 要查找的扩展名;
  255. OUT STR_VEC *pvtIsonym = NULL // 返回同名的文件名;
  256. );
  257. // 指定一组文件,与一文件夹对比;
  258. INT comparefiles_findin_folder(
  259. IN STR_VEC &vtfiles, // 指定的一组源文件;
  260. IN LPCTSTR folder, // 指定的文件夹;
  261. IN BOOL bsubfolder, // 是否查找子文件夹;
  262. IN LPCTSTR findext, // 要查找的扩展名;
  263. OUT STR_VEC *pvtIsonym = NULL // 返回同名的文件名;
  264. );
  265. // 文件夹自我对比(所有子文件夹对比)
  266. INT comparefolderself(
  267. IN LPCTSTR folder, // 指定文件夹;
  268. IN LPCTSTR findext, // 要查找的扩展名;
  269. OUT STR_VEC *pvtIsonym = NULL // 返回同名的文件名;
  270. );
  271. // 指定一文件夹,与另一文件夹对比;
  272. INT comparefolder_findin_folder(
  273. IN LPCTSTR folder1, // 指定源文件夹;
  274. IN LPCTSTR folder2, // 指定目标文件夹;
  275. IN BOOL bsubfolder, // 是否查找子文件夹;
  276. IN LPCTSTR findext, // 要查找的扩展名;
  277. OUT STR_VEC *pvtIsonym = NULL // 返回同名的文件名;
  278. );
  279. };
  280. #endif