filehelper.cpp 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491
  1. #include "StdAfx.h"
  2. #include "filehelper.h"
  3. #include <shlwapi.h>
  4. // 排序和乱序使用stl;
  5. #include <cstdlib>
  6. #include <ctime>
  7. #include <algorithm>
  8. // _mkdir头文件;
  9. #include <direct.h>
  10. int myrandom(int i) { return std::rand() % i; }
  11. filehelper::filehelper(void)
  12. {
  13. }
  14. filehelper::~filehelper(void)
  15. {
  16. }
  17. /************************************************************************/
  18. /* 函数:[2/21/2017 Jeff];
  19. /* 描述:;
  20. /* 参数:;
  21. /* [IN] :;
  22. /* [OUT] :;
  23. /* [IN/OUT] :;
  24. /* 返回:void;
  25. /* 注意:;
  26. /* 示例:;
  27. /*
  28. /* 修改:;
  29. /* 日期:;
  30. /* 内容:;
  31. /************************************************************************/
  32. void filehelper::random(IN STR_VEC& vtContent, IN BOOL bSort /* = TRUE */)
  33. {
  34. if (bSort)
  35. {//排序;
  36. std::sort(vtContent.begin(), vtContent.end());
  37. }
  38. else
  39. {//乱序;
  40. //设置随即数生成器的种子;
  41. std::srand(unsigned(std::time(0)));
  42. std::random_shuffle(vtContent.begin(), vtContent.end(), myrandom);
  43. }
  44. }
  45. /************************************************************************/
  46. /* 函数:[2/21/2017 Jeff];
  47. /* 描述:;
  48. /* 参数:;
  49. /* [IN] :;
  50. /* [OUT] :;
  51. /* [IN/OUT] :;
  52. /* 返回:void;
  53. /* 注意:;
  54. /* 示例:;
  55. /*
  56. /* 修改:;
  57. /* 日期:;
  58. /* 内容:;
  59. /************************************************************************/
  60. void filehelper::split(OUT vector<TString>& vtSplit, IN const TString str, IN const TString strSplit)
  61. {
  62. if (str.size() == 0 || strSplit.size() == 0)
  63. return;
  64. INT nIndex = 0;
  65. vtSplit.clear();
  66. TString strtmp = str;
  67. TString strtmp2;
  68. do
  69. {
  70. if (TString::npos != (nIndex = strtmp.find_first_of(strSplit)))
  71. {
  72. strtmp2 = strtmp.substr(0, nIndex);
  73. if (strtmp2.size())vtSplit.push_back(strtmp2);
  74. strtmp = strtmp.substr(nIndex + strSplit.size());
  75. }
  76. } while (strtmp.find_first_of(strSplit) != TString::npos);
  77. if (strtmp.size())
  78. vtSplit.push_back(strtmp);
  79. }
  80. /************************************************************************/
  81. /* 函数:[2/19/2017 Jeff];
  82. /* 描述:保留指定的扩展名文件;
  83. /* 参数:;
  84. /* [IN] keepExt:要保留的扩展名;
  85. /* [OUT] vtfiles:要提取保留扩展名的文件数组;
  86. /* [IN/OUT] :;
  87. /* 返回:void;
  88. /* 注意:;
  89. /* 示例:;
  90. /*
  91. /* 修改:;
  92. /* 日期:;
  93. /* 内容:;
  94. /************************************************************************/
  95. void filehelper::keepdownbyext(IN const TString &keepExt, IN STR_VEC &vtfiles)
  96. {
  97. if (keepExt.find(_T("*.*")) != TString::npos) return;
  98. if (vtfiles.size() == 0) return;
  99. // 获取复制扩展名;
  100. int nIndex = 0;
  101. TString strtmp;
  102. TString strRemainExt(keepExt);
  103. strRemainExt.append(_T("|"));
  104. STR_VEC vtRemainExt;
  105. // 将所有扩展名解析到数组里;
  106. do
  107. {
  108. nIndex = strRemainExt.find(_T('|'));
  109. if (nIndex != TString::npos)
  110. {
  111. strtmp = strRemainExt.substr(0, nIndex);
  112. strRemainExt = strRemainExt.substr(nIndex + 1);
  113. if (strtmp.compare(_T("*.*")))
  114. vtRemainExt.push_back(strtmp);
  115. }
  116. } while (strRemainExt.find(_T('|')) != TString::npos);
  117. STR_VEC vtresult;
  118. // 过滤非复制扩展名的文件,同时去掉缩略图,保留指定复制扩展名的文件;
  119. for (STR_VEC::iterator itExt = vtRemainExt.begin(); itExt != vtRemainExt.end(); itExt++)
  120. {
  121. for (STR_VEC::iterator it = vtfiles.begin(); it != vtfiles.end();)
  122. {
  123. if (match(itExt->substr(1), it->c_str()))
  124. {
  125. vtresult.push_back(*it);
  126. it = vtfiles.erase(it);
  127. }
  128. else
  129. it++;
  130. }
  131. }
  132. vtfiles.clear();
  133. for ( STR_VEC::iterator it = vtresult.begin(); it != vtresult.end(); it++ )
  134. {
  135. vtfiles.push_back(*it);
  136. }
  137. }
  138. void filehelper::keepdownbyext(IN const TString &keepExt, IN const STR_VEC &vtfiles, OUT STR_VEC &vtresult)
  139. {
  140. if (keepExt.find(_T("*.*")) != TString::npos) return;
  141. if (vtfiles.size() == 0) return;
  142. // 获取复制扩展名;
  143. int nIndex = 0;
  144. TString strtmp;
  145. TString strRemainExt(keepExt);
  146. strRemainExt.append(_T("|"));
  147. STR_VEC vtRemainExt;
  148. // 将所有扩展名解析到数组里;
  149. do
  150. {
  151. nIndex = strRemainExt.find(_T('|'));
  152. if (nIndex != TString::npos)
  153. {
  154. strtmp = strRemainExt.substr(0, nIndex);
  155. strRemainExt = strRemainExt.substr(nIndex + 1);
  156. if (strtmp.compare(_T("*.*")))
  157. vtRemainExt.push_back(strtmp);
  158. }
  159. } while (strRemainExt.find(_T('|')) != TString::npos);
  160. #if 0
  161. // 过滤非复制扩展名的文件,同时去掉缩略图,保留指定复制扩展名的文件;
  162. for (STR_VEC::iterator itExt = vtRemainExt.begin(); itExt != vtRemainExt.end(); itExt++)
  163. {
  164. for (STR_VEC::const_iterator it = vtfiles.begin(); it != vtfiles.end(); it++)
  165. {
  166. if (match(itExt->substr(1), it->c_str()))
  167. {
  168. vtresult.push_back(*it);
  169. }
  170. }
  171. }
  172. #else
  173. STR_VEC vt_files;
  174. for (STR_VEC::const_iterator it = vtfiles.begin(); it != vtfiles.end(); it++ )
  175. {// 不能直接用vtresult来复制,因为如果vtresult不为空的情况下,会有异常出现;
  176. vt_files.push_back(*it);
  177. }
  178. for (STR_VEC::iterator itExt = vtRemainExt.begin(); itExt != vtRemainExt.end(); itExt++)
  179. {
  180. for (STR_VEC::iterator it = vt_files.begin(); it != vt_files.end(); )
  181. {
  182. if (match(itExt->substr(1), it->c_str()))
  183. {
  184. vtresult.push_back(*it);
  185. it = vt_files.erase(it);
  186. }
  187. else
  188. it++;
  189. }
  190. }
  191. #endif
  192. }
  193. /************************************************************************/
  194. /* 函数:keepoutext[2/19/2017 Jeff];
  195. /* 描述:移除指定扩展名的文件;
  196. /* 参数:;
  197. /* [IN] :;
  198. /* [OUT] :;
  199. /* [IN/OUT] :;
  200. /* 返回:void;
  201. /* 注意:;
  202. /* 示例:;
  203. /*
  204. /* 修改:;
  205. /* 日期:;
  206. /* 内容:;
  207. /************************************************************************/
  208. void filehelper::keepoutbyext(IN const TString &removeext, IN STR_VEC &vtfiles)
  209. {
  210. if (removeext.find(_T("*.*")) != TString::npos) return;
  211. if (vtfiles.size() == 0) return;
  212. // 获取复制扩展名;
  213. int nIndex = 0;
  214. TString strtmp;
  215. TString strRemoveExt(removeext);
  216. strRemoveExt.append(_T("|"));
  217. STR_VEC vtRemoveExt;
  218. // 将所有扩展名解析到数组里;
  219. do
  220. {
  221. nIndex = strRemoveExt.find(_T('|'));
  222. if (nIndex != TString::npos)
  223. {
  224. strtmp = strRemoveExt.substr(0, nIndex);
  225. strRemoveExt = strRemoveExt.substr(nIndex + 1);
  226. if (strtmp.compare(_T("*.*")))
  227. vtRemoveExt.push_back(strtmp);
  228. }
  229. } while (strRemoveExt.find(_T('|')) != TString::npos);
  230. // 过滤非复制扩展名的文件,同时去掉缩略图,保留指定复制扩展名的文件;
  231. for (STR_VEC::iterator itExt = vtRemoveExt.begin(); itExt != vtRemoveExt.end(); itExt++)
  232. {
  233. for (STR_VEC::iterator it = vtfiles.begin(); it != vtfiles.end();)
  234. {
  235. if (match(itExt->substr(1), it->c_str()))
  236. {
  237. it = vtfiles.erase(it);
  238. }
  239. else
  240. it++;
  241. }
  242. }
  243. }
  244. void filehelper::keepoutbyext(IN const TString &removeext, IN const STR_VEC &vtfiles, OUT STR_VEC &vtresult)
  245. {
  246. if (removeext.find(_T("*.*")) != TString::npos) return;
  247. if (vtfiles.size() == 0) return;
  248. // 获取复制扩展名;
  249. int nIndex = 0;
  250. TString strtmp;
  251. TString strRemoveExt(removeext);
  252. strRemoveExt.append(_T("|"));
  253. STR_VEC vtRemoveExt;
  254. // 将所有扩展名解析到数组里;
  255. do
  256. {
  257. nIndex = strRemoveExt.find(_T('|'));
  258. if (nIndex != TString::npos)
  259. {
  260. strtmp = strRemoveExt.substr(0, nIndex);
  261. strRemoveExt = strRemoveExt.substr(nIndex + 1);
  262. if (strtmp.compare(_T("*.*")))
  263. vtRemoveExt.push_back(strtmp);
  264. }
  265. } while (strRemoveExt.find(_T('|')) != TString::npos);
  266. // 复制到新容器中;
  267. STR_VEC vt_files;
  268. for (STR_VEC::const_iterator it = vtfiles.begin(); it != vtfiles.end(); it++ )
  269. {// 不能直接用vtresult来复制,因为如果vtresult不为空的情况下,会有异常出现;
  270. vt_files.push_back(*it);
  271. }
  272. // 过滤非复制扩展名的文件,同时去掉缩略图,保留指定复制扩展名的文件;
  273. for (STR_VEC::iterator itExt = vtRemoveExt.begin(); itExt != vtRemoveExt.end(); itExt++)
  274. {
  275. for (STR_VEC::iterator it = vt_files.begin(); it != vt_files.end();)
  276. {
  277. if (match(itExt->substr(1), it->c_str()))
  278. {
  279. vtresult.push_back(*it);
  280. it = vt_files.erase(it);
  281. }
  282. else
  283. it++;
  284. }
  285. }
  286. }
  287. void filehelper::keepdowbyname(IN const STR_VEC &vtnames)
  288. {
  289. if ( m_pvtfiles == NULL || m_pvtnames == &vtnames )
  290. return;
  291. INT nIndex = 0;
  292. STR_VEC vt_result_files;
  293. if ( m_pvtnames == NULL)
  294. {
  295. STR_VEC::const_iterator it_name = vtnames.begin();
  296. for ( ; it_name != vtnames.end(); it_name++ )
  297. {
  298. STR_VEC::iterator it_file = m_pvtfiles->begin();
  299. for ( ; it_file != m_pvtfiles->end(); )
  300. {
  301. nIndex = it_file->find_last_of(_T('\\'));
  302. if (TString::npos != nIndex)
  303. {
  304. if (_tcsicmp(it_file->substr(nIndex + 1).c_str(), it_name->c_str()) == 0)
  305. {
  306. vt_result_files.push_back(*it_file);
  307. it_file = m_pvtfiles->erase(it_file);
  308. continue;
  309. }
  310. }
  311. it_file++;
  312. }
  313. }
  314. m_pvtfiles->clear();
  315. for ( STR_VEC::iterator it = vt_result_files.begin(); it != vt_result_files.end(); it++ )
  316. {
  317. m_pvtfiles->push_back(*it);
  318. }
  319. }
  320. else
  321. {
  322. if ( m_pvtnames->size() != m_pvtfiles->size() )
  323. return;
  324. STR_VEC::iterator it_name;
  325. STR_VEC::iterator it_file;
  326. STR_VEC vt_result_names;
  327. for ( STR_VEC::const_iterator it = vtnames.begin(); it != vtnames.end(); it++ )
  328. {
  329. it_name = m_pvtnames->begin();
  330. it_file = m_pvtfiles->begin();
  331. for ( ; it_file != m_pvtfiles->end(), it_name != m_pvtnames->end();)
  332. {
  333. if ( _tcsicmp(it_name->c_str(), it->c_str()) == 0 )
  334. {
  335. vt_result_files.push_back(*it_file);
  336. vt_result_names.push_back(*it_name);
  337. it_file = m_pvtfiles->erase(it_file);
  338. it_name = m_pvtnames->erase(it_name);
  339. continue;
  340. }
  341. it_file++;
  342. it_name++;
  343. }
  344. }
  345. m_pvtfiles->clear();
  346. m_pvtnames->clear();
  347. it_name = vt_result_names.begin();
  348. it_file = vt_result_files.begin();
  349. for ( ; it_file != vt_result_files.end(), it_name != vt_result_names.end(); it_file++, it_name++ )
  350. {
  351. m_pvtfiles->push_back(*it_file);
  352. m_pvtnames->push_back(*it_name);
  353. }
  354. }
  355. }
  356. void filehelper::keepdowbyname(IN const STR_VEC &vtnames, IN STR_VEC &vtfiles)
  357. {
  358. if ( vtnames.size() == 0 )
  359. return;
  360. INT nIndex = 0;
  361. STR_VEC vt_result_files;
  362. STR_VEC::const_iterator it_name = vtnames.begin();
  363. for ( ; it_name != vtnames.end(); it_name++ )
  364. {
  365. STR_VEC::iterator it_file = vtfiles.begin();
  366. for ( ; it_file != vtfiles.end(); )
  367. {
  368. nIndex = it_file->find_last_of(_T('\\'));
  369. if (TString::npos != nIndex)
  370. {
  371. if (_tcsicmp(it_file->substr(nIndex + 1).c_str(), it_name->c_str()) == 0)
  372. {
  373. vt_result_files.push_back(*it_file);
  374. it_file = vtfiles.erase(it_file);
  375. continue;
  376. }
  377. }
  378. it_file++;
  379. }
  380. }
  381. vtfiles.clear();
  382. for ( STR_VEC::iterator it = vt_result_files.begin(); it != vt_result_files.end(); it++ )
  383. {
  384. vtfiles.push_back(*it);
  385. }
  386. }
  387. void filehelper::keepdowbyname(IN const STR_VEC &vtnames, IN const STR_VEC &vtfiles, OUT STR_VEC &vt_result)
  388. {
  389. if ( vtnames.size() == 0 )
  390. return;
  391. INT nIndex = 0;
  392. STR_VEC::const_iterator it_name = vtnames.begin();
  393. for ( ; it_name != vtnames.end(); it_name++ )
  394. {
  395. STR_VEC::const_iterator it_file = vtfiles.begin();
  396. for ( ; it_file != vtfiles.end(); it_file++)
  397. {
  398. nIndex = it_file->find_last_of(_T('\\'));
  399. if (TString::npos != nIndex)
  400. {
  401. if (_tcsicmp(it_file->substr(nIndex + 1).c_str(), it_name->c_str()) == 0)
  402. {
  403. vt_result.push_back(*it_file);
  404. }
  405. }
  406. }
  407. }
  408. }
  409. void filehelper::keepdowbyname_noext(IN const STR_VEC &vtnames)
  410. {
  411. if ( m_pvtfiles == NULL || m_pvtnames == &vtnames )
  412. return;
  413. INT nIndex = 0;
  414. STR_VEC vt_result_files;
  415. if ( m_pvtnames == NULL)
  416. {
  417. INT nIndex2 = 0;
  418. STR_VEC::const_iterator it_name = vtnames.begin();
  419. for ( ; it_name != vtnames.end(); it_name++ )
  420. {
  421. STR_VEC::iterator it_file = m_pvtfiles->begin();
  422. for ( ; it_file != m_pvtfiles->end(); )
  423. {
  424. nIndex = it_file->find_last_of(_T('\\'));
  425. nIndex2 = it_file->find_last_of(_T('.'));
  426. if (TString::npos != nIndex && TString::npos != nIndex2 && nIndex > nIndex2 )
  427. {
  428. if ( _tcsicmp(it_file->substr(nIndex+1,nIndex2 - nIndex - 1).c_str(), it_name->c_str()) == 0)
  429. {
  430. vt_result_files.push_back(*it_file);
  431. it_file = m_pvtfiles->erase(it_file);
  432. continue;
  433. }
  434. }
  435. it_file++;
  436. }
  437. }
  438. m_pvtfiles->clear();
  439. for ( STR_VEC::iterator it = vt_result_files.begin(); it != vt_result_files.end(); it++ )
  440. {
  441. m_pvtfiles->push_back(*it);
  442. }
  443. }
  444. else
  445. {
  446. if ( m_pvtnames->size() != m_pvtfiles->size() )
  447. return;
  448. STR_VEC::iterator it_name;
  449. STR_VEC::iterator it_file;
  450. STR_VEC vt_result_names;
  451. for ( STR_VEC::const_iterator it = vtnames.begin(); it != vtnames.end(); it++ )
  452. {
  453. it_name = m_pvtnames->begin();
  454. it_file = m_pvtfiles->begin();
  455. for ( ; it_file != m_pvtfiles->end(), it_name != m_pvtnames->end();)
  456. {
  457. if ( TString::npos != ( nIndex = it_name->find_last_of(_T('.'))))
  458. {
  459. if ( _tcsicmp(it_name->substr(0, nIndex).c_str(), it->c_str()) == 0 )
  460. {
  461. vt_result_files.push_back(*it_file);
  462. vt_result_names.push_back(*it_name);
  463. it_file = m_pvtfiles->erase(it_file);
  464. it_name = m_pvtnames->erase(it_name);
  465. continue;
  466. }
  467. }
  468. it_file++;
  469. it_name++;
  470. }
  471. }
  472. m_pvtfiles->clear();
  473. m_pvtnames->clear();
  474. it_name = vt_result_names.begin();
  475. it_file = vt_result_files.begin();
  476. for ( ; it_file != vt_result_files.end(), it_name != vt_result_names.end(); it_file++, it_name++ )
  477. {
  478. m_pvtfiles->push_back(*it_file);
  479. m_pvtnames->push_back(*it_name);
  480. }
  481. }
  482. }
  483. void filehelper::keepdowbyname_noext(IN const STR_VEC &vtnames, IN STR_VEC &vtfiles)
  484. {
  485. if ( vtnames.size() == 0 )
  486. return;
  487. INT nIndex = 0;
  488. TString strName;
  489. STR_VEC vt_result_files;
  490. STR_VEC::const_iterator it_name = vtnames.begin();
  491. for ( ; it_name != vtnames.end(); it_name++ )
  492. {
  493. STR_VEC::iterator it_file = vtfiles.begin();
  494. for ( ; it_file != vtfiles.end(); )
  495. {
  496. nIndex = it_file->find_last_of(_T('\\'));
  497. if (TString::npos != nIndex)
  498. {
  499. strName = it_file->substr(nIndex+1);
  500. if ( TString::npos != ( nIndex = strName.find_last_of(_T('.'))))
  501. {
  502. if ( _tcsicmp(strName.substr(0,nIndex).c_str(), it_name->c_str()) == 0)
  503. {
  504. vt_result_files.push_back(*it_file);
  505. it_file = vtfiles.erase(it_file);
  506. continue;
  507. }
  508. }
  509. }
  510. it_file++;
  511. }
  512. }
  513. vtfiles.clear();
  514. for ( STR_VEC::iterator it = vt_result_files.begin(); it != vt_result_files.end(); it++ )
  515. {
  516. vtfiles.push_back(*it);
  517. }
  518. }
  519. void filehelper::keepdowbyname_noext(IN const STR_VEC &vtnames, IN const STR_VEC &vtfiles, OUT STR_VEC &vt_result)
  520. {
  521. if ( vtnames.size() == 0 )
  522. return;
  523. INT nIndex = 0;
  524. TString strName;
  525. STR_VEC::const_iterator it_name = vtnames.begin();
  526. for ( ; it_name != vtnames.end(); it_name++ )
  527. {
  528. STR_VEC::const_iterator it_file = vtfiles.begin();
  529. for ( ; it_file != vtfiles.end(); it_file++)
  530. {
  531. nIndex = it_file->find_last_of(_T('\\'));
  532. if (TString::npos != nIndex)
  533. {
  534. strName = it_file->substr(nIndex+1);
  535. if ( TString::npos != ( nIndex = strName.find_last_of(_T('.'))))
  536. {
  537. if ( _tcsicmp(strName.substr(0,nIndex).c_str(), it_name->c_str()) == 0)
  538. {
  539. vt_result.push_back(*it_file);
  540. }
  541. }
  542. }
  543. }
  544. }
  545. }
  546. void filehelper::subgroupExt(IN const TString &ext1, IN STR_VEC &vt1, IN const TString &ext2, IN STR_VEC &vt2)
  547. {
  548. // if (ext1.find(_T("*.*")) != TString::npos ) return;
  549. // if ( !iscorrectext(ext1) || vt1.size() == 0 ) return;
  550. //
  551. // // 获取复制扩展名;
  552. // int nIndex = 0;
  553. // TString strtmp;
  554. // TString strExt1(ext1);
  555. // strExt1.append(_T("|"));
  556. // STR_VEC vtExt1;
  557. //
  558. // // 将所有扩展名解析到数组里;
  559. // do
  560. // {
  561. // nIndex = strExt1.find(_T('|'));
  562. // if ( nIndex != TString::npos )
  563. // {
  564. // strtmp = strExt1.substr(0,nIndex);
  565. // strExt1 = strExt1.substr(nIndex+1);
  566. //
  567. // if(strtmp.compare(_T("*.*")))
  568. // vtExt1.push_back(strtmp);
  569. // }
  570. // } while ( strExt1.find(_T('|')) != TString::npos );
  571. }
  572. /************************************************************************/
  573. /* 函数:filterbyname[2/21/2017 Jeff];
  574. /* 描述:根据有后缀的文件名(如:001.jpg)来过虑文件;;
  575. /* 参数:;
  576. /* [IN] vtfiles:要被过滤的文件路径数组;
  577. /* [IN] vtnames:要过滤的文件名,每个文件名都有后缀,如:001.jpg;
  578. /* 返回:void;
  579. /* 注意:;
  580. /* 示例:;
  581. /*
  582. /* 修改:;
  583. /* 日期:;
  584. /* 内容:;
  585. /************************************************************************/
  586. void filehelper::filterbyname(IN STR_VEC &vtfiles, IN const STR_VEC &vtnames)
  587. {// 再按名称过滤;
  588. INT nIndex = 0;
  589. TString strName;
  590. for ( STR_VEC::const_iterator it_name = vtnames.begin(); it_name != vtnames.end(); it_name++ )
  591. {
  592. for ( STR_VEC::iterator it_file = vtfiles.begin(); it_file != vtfiles.end(); )
  593. {
  594. nIndex = it_file->find_last_of(_T('\\'));
  595. if (TString::npos != nIndex)
  596. {
  597. strName = it_file->substr(nIndex+1);
  598. if ( _tcsicmp(strName.c_str(), it_name->c_str()) == 0 )
  599. {
  600. it_file = vtfiles.erase(it_file);
  601. continue;
  602. }
  603. }
  604. it_file++;
  605. }
  606. }
  607. }
  608. void filehelper::filterbyname(IN const STR_VEC &vtnames)
  609. {
  610. if ( m_pvtfiles == NULL || m_pvtnames == &vtnames )
  611. return;
  612. INT nIndex = 0;
  613. TString strName;
  614. if ( m_pvtnames == NULL)
  615. {
  616. STR_VEC::const_iterator it_name = vtnames.begin();
  617. for ( ; it_name != vtnames.end(); it_name++ )
  618. {
  619. STR_VEC::iterator it_file = m_pvtfiles->begin();
  620. for ( ; it_file != m_pvtfiles->end(); )
  621. {
  622. nIndex = it_file->find_last_of(_T('\\'));
  623. if (TString::npos != nIndex)
  624. {
  625. strName = it_file->substr(nIndex+1);
  626. if ( _tcsicmp(strName.c_str(), it_name->c_str()) == 0)
  627. {
  628. it_file = m_pvtfiles->erase(it_file);
  629. continue;
  630. }
  631. }
  632. it_file++;
  633. }
  634. }
  635. }
  636. else
  637. {
  638. if ( m_pvtnames->size() != m_pvtfiles->size() )
  639. return;
  640. for ( STR_VEC::const_iterator it = vtnames.begin(); it != vtnames.end(); it++ )
  641. {
  642. STR_VEC::iterator it_name = m_pvtnames->begin();
  643. STR_VEC::iterator it_file = m_pvtfiles->begin();
  644. for ( ; it_file != m_pvtfiles->end(), it_name != m_pvtnames->end();)
  645. {
  646. if ( _tcsicmp(it_name->c_str(), it->c_str()) == 0 )
  647. {
  648. it_file = m_pvtfiles->erase(it_file);
  649. it_name = m_pvtnames->erase(it_name);
  650. continue;
  651. }
  652. it_file++;
  653. it_name++;
  654. }
  655. }
  656. }
  657. }
  658. // 根据无后缀的文件名(如:001)来过虑文件;
  659. void filehelper::filterbyname_noext(IN STR_VEC &vtfiles, IN const STR_VEC &vtnames)
  660. {// 再按名称过滤;
  661. INT nIndex = 0;
  662. INT nIndex2 = 0;
  663. TString strName;
  664. for ( STR_VEC::iterator it_file = vtfiles.begin(); it_file != vtfiles.end(); )
  665. {
  666. nIndex = it_file->find_last_of(_T('\\'));
  667. nIndex2 = it_file->find_last_of(_T('.'));
  668. for ( STR_VEC::const_iterator it_name = vtnames.begin(); it_name != vtnames.end(); it_name++ )
  669. {
  670. if (TString::npos != nIndex && TString::npos != nIndex2 && nIndex2 > nIndex)
  671. {
  672. if ( _tcsicmp(it_file->substr(nIndex+1,nIndex2-nIndex-1).c_str(), it_name->c_str()) == 0)
  673. {
  674. it_file = vtfiles.erase(it_file);
  675. continue;
  676. }
  677. }
  678. it_file++;
  679. }
  680. }
  681. }
  682. void filehelper::filterbyname_noext(IN const STR_VEC &vtnames)
  683. {
  684. if ( m_pvtfiles == NULL || m_pvtnames == &vtnames )
  685. return;
  686. INT nIndex = 0;
  687. TString strName;
  688. if ( m_pvtnames == NULL )
  689. {
  690. INT nIndex2 = 0;
  691. STR_VEC::iterator it_file = m_pvtfiles->begin();
  692. for ( ; it_file != m_pvtfiles->end(); )
  693. {
  694. nIndex = it_file->find_last_of(_T('\\'));
  695. nIndex2 = it_file->find_last_of(_T('.'));
  696. for ( STR_VEC::const_iterator it_name = vtnames.begin(); it_name != vtnames.end(); it_name++ )
  697. {
  698. if (TString::npos != nIndex && TString::npos != nIndex2 && nIndex2 > nIndex)
  699. {
  700. if ( _tcsicmp(it_file->substr(nIndex+1,nIndex2-nIndex-1).c_str(), it_name->c_str()) == 0 )
  701. {
  702. it_file = m_pvtfiles->erase(it_file);
  703. continue;
  704. }
  705. }
  706. it_file++;
  707. }
  708. }
  709. }
  710. else
  711. {
  712. if (m_pvtnames->size() != m_pvtfiles->size())
  713. return;
  714. for ( STR_VEC::const_iterator it = vtnames.begin(); it != vtnames.end(); it++ )
  715. {
  716. STR_VEC::iterator it_name = m_pvtnames->begin();
  717. STR_VEC::iterator it_file = m_pvtfiles->begin();
  718. for ( ; it_file != m_pvtfiles->end(), it_name != m_pvtnames->end();)
  719. {
  720. if ( TString::npos != (nIndex = it_name->find_last_of(_T('.'))) )
  721. {
  722. if ( _tcsicmp(it_name->substr(0, nIndex).c_str(), it->c_str()) == 0 )
  723. {
  724. it_file = m_pvtfiles->erase(it_file);
  725. it_name = m_pvtnames->erase(it_name);
  726. continue;
  727. }
  728. it_file++;
  729. it_name++;
  730. }
  731. }
  732. }
  733. }
  734. }
  735. //////////////////////////////////////////////////////////////////////////
  736. BOOL filehelper::getall(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN OUT STR_VEC *pvtfiles, IN OUT STR_VEC *pvtnames, IN OUT STR_VEC *pvtfolders)
  737. {
  738. // 路径不存在;
  739. if (!PathFileExists(lpfolder))
  740. return FALSE;
  741. // 指针空;
  742. if (!pvtfiles || !pvtnames || !pvtfolders ) return FALSE;
  743. m_pvtfiles = pvtfiles;
  744. m_pvtnames = pvtnames;
  745. m_pvtfolders = pvtfolders;
  746. #if USE_IMGEXT
  747. // 判断扩展名有效性;
  748. if (!iscorrectext(lpfindext)) return FALSE;
  749. #endif
  750. findall(lpfolder);
  751. if ( _tcsstr(lpfindext, _T("*.*")) == NULL )
  752. {// 需要保留指定后缀;
  753. keepdownbyext(lpfindext, *pvtfiles);
  754. keepdownbyext(lpfindext, *pvtnames);
  755. }
  756. return TRUE;
  757. }
  758. BOOL filehelper::getsubfolder(IN LPCTSTR lpfolder, IN STR_VEC *pvtfolders)
  759. {
  760. // 路径不存在;
  761. if (!PathFileExists(lpfolder))
  762. return FALSE;
  763. // 指针空;
  764. if (pvtfolders == NULL) return FALSE;
  765. m_pvtfolders = pvtfolders;
  766. findsubfolder(lpfolder);
  767. return TRUE;
  768. }
  769. BOOL filehelper::getallsubfolder(IN LPCTSTR lpfolder, IN STR_VEC *pvtfolders)
  770. {
  771. // 路径不存在;
  772. if (!PathFileExists(lpfolder))
  773. return FALSE;
  774. // 指针空;
  775. if (pvtfolders == NULL) return FALSE;
  776. m_pvtfolders = pvtfolders;
  777. findallsubfolder(lpfolder);
  778. return TRUE;
  779. }
  780. //////////////////////////////////////////////////////////////////////////
  781. BOOL filehelper::getfiles_findin_subfolder(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtfiles)
  782. {
  783. // 路径不存在;
  784. if (!PathFileExists(lpfolder))
  785. return FALSE;
  786. // 指针空;
  787. if (pvtfiles == NULL) return FALSE;
  788. m_pvtfiles = pvtfiles;
  789. #if USE_IMGEXT
  790. // 判断扩展名有效性;
  791. if (!iscorrectext(lpfindext)) return FALSE;
  792. #endif
  793. findfiles_findin_subfolder(lpfolder);
  794. if ( _tcsstr(lpfindext, _T("*.*")) == NULL )
  795. {// 需要保留指定后缀;
  796. keepdownbyext(lpfindext, *pvtfiles);
  797. }
  798. return TRUE;
  799. }
  800. BOOL filehelper::getfiles_findout_subfolder(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtfiles)
  801. {
  802. // 路径不存在;
  803. if (!PathFileExists(lpfolder))
  804. return FALSE;
  805. // 指针空;
  806. if (pvtfiles == NULL) return FALSE;
  807. m_pvtfiles = pvtfiles;
  808. #if USE_IMGEXT
  809. // 判断扩展名有效性;
  810. if (!iscorrectext(lpfindext)) return FALSE;
  811. #endif
  812. findfiles_findout_subfolder(lpfolder);
  813. if (lpfindext && _tcsstr(lpfindext, _T("*.*")) == NULL )
  814. {// 需要保留指定后缀;
  815. keepdownbyext(lpfindext, *pvtfiles);
  816. }
  817. return TRUE;
  818. }
  819. BOOL filehelper::getfiles_within_subfolder(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtfiles, IN STR_VEC *pvtfolders)
  820. {
  821. // 路径不存在;
  822. if (!PathFileExists(lpfolder))
  823. return FALSE;
  824. // 指针空;
  825. if (pvtfiles == NULL) return FALSE;
  826. m_pvtfiles = pvtfiles;
  827. m_pvtfolders = pvtfolders;
  828. #if USE_IMGEXT
  829. // 判断扩展名有效性;
  830. if (!iscorrectext(lpfindext)) return FALSE;
  831. #endif
  832. findfiles_within_subfolder(lpfolder);
  833. if (lpfindext && _tcsstr(lpfindext, _T("*.*")) == NULL )
  834. {// 需要保留指定后缀;
  835. keepdownbyext(lpfindext, *pvtfiles);
  836. }
  837. return TRUE;
  838. }
  839. //////////////////////////////////////////////////////////////////////////
  840. BOOL filehelper::getfiles_bynames_findin_subfolder( IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC &vtnames, IN STR_VEC *pvtfiles )
  841. {
  842. // 路径不存在;
  843. if (!PathFileExists(lpfolder))
  844. return FALSE;
  845. // 指针空;
  846. if (pvtfiles == NULL) return FALSE;
  847. m_pvtfiles = pvtfiles;
  848. #if USE_IMGEXT
  849. // 判断扩展名有效性;
  850. if (!iscorrectext(lpfindext)) return FALSE;
  851. #endif
  852. findfiles_findin_subfolder(lpfolder);
  853. if (lpfindext && _tcsstr(lpfindext, _T("*.*")) == NULL )
  854. {// 需要保留指定后缀;
  855. keepdownbyext(lpfindext, *pvtfiles);
  856. }
  857. // 再按名称过滤;
  858. filterbyname(*pvtfiles, vtnames);
  859. return TRUE;
  860. }
  861. BOOL filehelper::getfiles_bynames_findout_subfolder( IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC &vtnames, IN OUT STR_VEC *pvtfiles )
  862. {
  863. // 路径不存在;
  864. if (!PathFileExists(lpfolder))
  865. return FALSE;
  866. // 指针空;
  867. if (pvtfiles == NULL) return FALSE;
  868. m_pvtfiles = pvtfiles;
  869. #if USE_IMGEXT
  870. // 判断扩展名有效性;
  871. if (!iscorrectext(lpfindext)) return FALSE;
  872. #endif
  873. findfiles_findout_subfolder(lpfolder);
  874. if (lpfindext && _tcsstr(lpfindext, _T("*.*")) == NULL )
  875. {// 需要保留指定后缀;
  876. keepdownbyext(lpfindext, *pvtfiles);
  877. }
  878. // 再按名称过滤;
  879. filterbyname(*pvtfiles, vtnames);
  880. return TRUE;
  881. }
  882. BOOL filehelper::getfiles_bynames_within_subfolder( IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC &vtnames, IN STR_VEC *pvtfiles, IN STR_VEC *pvtfolders )
  883. {
  884. // 路径不存在;
  885. if (!PathFileExists(lpfolder))
  886. return FALSE;
  887. // 指针空;
  888. if (pvtfiles == NULL) return FALSE;
  889. m_pvtfiles = pvtfiles;
  890. m_pvtfolders = pvtfolders;
  891. #if USE_IMGEXT
  892. // 判断扩展名有效性;
  893. if (!iscorrectext(lpfindext)) return FALSE;
  894. #endif
  895. findfiles_within_subfolder(lpfolder);
  896. if (lpfindext && _tcsstr(lpfindext, _T("*.*")) == NULL )
  897. {// 需要保留指定后缀;
  898. keepdownbyext(lpfindext, *pvtfiles);
  899. }
  900. // 再按名称过滤;
  901. filterbyname(*pvtfiles, vtnames);
  902. return TRUE;
  903. }
  904. //////////////////////////////////////////////////////////////////////////
  905. BOOL filehelper::getnames_findin_subfolder(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtnames)
  906. {
  907. // 路径不存在;
  908. if (!PathFileExists(lpfolder))
  909. return FALSE;
  910. // 指针空;
  911. if (pvtnames == NULL) return FALSE;
  912. #if USE_IMGEXT
  913. // 判断扩展名有效性;
  914. if (!iscorrectext(lpfindext)) return FALSE;
  915. #endif
  916. m_pvtnames = pvtnames;
  917. findnames_findin_subfolder(lpfolder);
  918. if (lpfindext && _tcsstr(lpfindext, _T("*.*")) == NULL )
  919. {// 需要保留指定后缀;
  920. keepdownbyext(lpfindext, *m_pvtnames);
  921. }
  922. return TRUE;
  923. }
  924. BOOL filehelper::getnames_findout_subfolder(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtnames)
  925. {
  926. // 路径不存在;
  927. if (!PathFileExists(lpfolder))
  928. return FALSE;
  929. // 指针空;
  930. if (pvtnames == NULL) return FALSE;
  931. #if USE_IMGEXT
  932. // 判断扩展名有效性;
  933. if (!iscorrectext(lpfindext)) return FALSE;
  934. #endif
  935. m_pvtnames = pvtnames;
  936. findnames_findout_subfolder(lpfolder);
  937. if (lpfindext && _tcsstr(lpfindext, _T("*.*")) == NULL )
  938. {// 需要保留指定后缀;
  939. keepdownbyext(lpfindext, *m_pvtnames);
  940. }
  941. return TRUE;
  942. }
  943. BOOL filehelper::getnames_within_subfolder(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtnames, IN STR_VEC *pvtfolders)
  944. {
  945. // 路径不存在;
  946. if (!PathFileExists(lpfolder))
  947. return FALSE;
  948. // 指针空;
  949. if (pvtnames == NULL || pvtfolders == NULL )
  950. return FALSE;
  951. m_pvtfolders = pvtfolders;
  952. #if USE_IMGEXT
  953. // 判断扩展名有效性;
  954. if (!iscorrectext(lpfindext)) return FALSE;
  955. #endif
  956. m_pvtnames = pvtnames;
  957. m_pvtfolders = pvtfolders;
  958. findnames_within_subfolder(lpfolder);
  959. if (lpfindext && _tcsstr(lpfindext, _T("*.*")) == NULL )
  960. {// 需要保留指定后缀;
  961. keepdownbyext(lpfindext, *m_pvtnames);
  962. }
  963. return TRUE;
  964. }
  965. //////////////////////////////////////////////////////////////////////////
  966. BOOL filehelper::getfilesnames_findin_subfolder(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtfiles, IN STR_VEC *pvtnames)
  967. {
  968. // 路径不存在;
  969. if (!PathFileExists(lpfolder))
  970. return FALSE;
  971. // 指针空;
  972. if (pvtnames || !pvtnames) return FALSE;
  973. m_pvtfiles = pvtfiles;
  974. m_pvtnames = pvtnames;
  975. #if USE_IMGEXT
  976. // 判断扩展名有效性;
  977. if (!iscorrectext(lpfindext)) return FALSE;
  978. #endif
  979. findfilesnames_findin_subfolder(lpfolder);
  980. if (lpfindext && _tcsstr(lpfindext, _T("*.*")) == NULL )
  981. {// 需要保留指定后缀;
  982. keepdownbyext(lpfindext, *pvtnames);
  983. keepdownbyext(lpfindext, *pvtfiles);
  984. }
  985. return TRUE;
  986. }
  987. BOOL filehelper::getfilesnames_findout_subfolder(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtfiles, IN STR_VEC *pvtnames)
  988. {
  989. // 路径不存在;
  990. if (!PathFileExists(lpfolder))
  991. return FALSE;
  992. // 指针空;
  993. if (pvtnames || !pvtnames) return FALSE;
  994. m_pvtfiles = pvtfiles;
  995. m_pvtnames = pvtnames;
  996. #if USE_IMGEXT
  997. // 判断扩展名有效性;
  998. if (!iscorrectext(lpfindext)) return FALSE;
  999. #endif
  1000. findfilesnames_findout_subfolder(lpfolder);
  1001. if (lpfindext && _tcsstr(lpfindext, _T("*.*")) == NULL )
  1002. {// 需要保留指定后缀;
  1003. keepdownbyext(lpfindext, *pvtnames);
  1004. keepdownbyext(lpfindext, *pvtfiles);
  1005. }
  1006. return TRUE;
  1007. }
  1008. BOOL filehelper::getfilesnames_within_subfolder(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtfiles, IN STR_VEC *pvtnames, IN STR_VEC *pvtfolders)
  1009. {
  1010. // 路径不存在;
  1011. if (!PathFileExists(lpfolder))
  1012. return FALSE;
  1013. // 指针空;
  1014. if (pvtnames || !pvtnames) return FALSE;
  1015. m_pvtfiles = pvtfiles;
  1016. m_pvtnames = pvtnames;
  1017. m_pvtfolders = pvtfolders;
  1018. #if USE_IMGEXT
  1019. // 判断扩展名有效性;
  1020. if (!iscorrectext(lpfindext)) return FALSE;
  1021. #endif
  1022. findfilesnames_within_subfolder(lpfolder);
  1023. if (lpfindext && _tcsstr(lpfindext, _T("*.*")) == NULL )
  1024. {// 需要保留指定后缀;
  1025. keepdownbyext(lpfindext, *pvtnames);
  1026. keepdownbyext(lpfindext, *pvtfiles);
  1027. }
  1028. return TRUE;
  1029. }
  1030. #if 1
  1031. //////////////////////////////////////////////////////////////////////////
  1032. BOOL filehelper::comparename_2file(IN LPCTSTR file1, IN LPCTSTR file2)
  1033. {
  1034. if (!file1 || !file2) return FALSE;
  1035. if (!PathFileExists(file1) || !PathFileExists(file2))
  1036. return FALSE;
  1037. TString strfile1 = file1;
  1038. TString strfile2 = file2;
  1039. strfile1 = getfilename(strfile1);
  1040. strfile2 = getfilename(strfile2);
  1041. return !strfile1.compare(strfile2);
  1042. }
  1043. BOOL filehelper::comparename_findin_names(IN LPCTSTR name)
  1044. {
  1045. if (!m_pvtnames || !name) return FALSE;
  1046. for (STR_VEC::iterator it = m_pvtnames->begin(); it != m_pvtnames->end(); it++)
  1047. {
  1048. if ( _tcsicmp(name, it->c_str()) == 0)
  1049. {
  1050. // 打印日志,或提示用户同名文件路径在哪;
  1051. return TRUE;
  1052. }
  1053. }
  1054. return FALSE;
  1055. }
  1056. BOOL filehelper::comparename_findin_names(IN LPCTSTR name, IN STR_VEC &vtnames)
  1057. {
  1058. if (!name) return FALSE;
  1059. for (STR_VEC::iterator it = vtnames.begin(); it != vtnames.end(); it++)
  1060. {
  1061. if ( _tcsicmp(name, it->c_str()) == 0)
  1062. {
  1063. // 打印日志,或提示用户同名文件路径在哪;
  1064. return TRUE;
  1065. }
  1066. }
  1067. return FALSE;
  1068. }
  1069. BOOL filehelper::comparename_findin_files(IN LPCTSTR name, IN STR_VEC &vtfiles)
  1070. {
  1071. if (!name) return FALSE;
  1072. int nIndex = 0;
  1073. for (STR_VEC::iterator it = vtfiles.begin(); it != vtfiles.end(); it++)
  1074. {
  1075. if ((nIndex = it->find_last_of(_T('\\'))) != TString::npos)
  1076. {
  1077. if (_tcsicmp(name, it->substr(nIndex+1).c_str()) == 0)
  1078. {
  1079. // 打印日志,或提示用户同名文件路径在哪;
  1080. return TRUE;
  1081. }
  1082. }
  1083. }
  1084. return FALSE;
  1085. }
  1086. BOOL filehelper::comparename_findin_folder(IN LPCTSTR name, IN LPCTSTR folder, IN LPCTSTR findext, IN BOOL bsubfolder)
  1087. {
  1088. #if USE_IMGEXT
  1089. if (!name || !iscorrectext(findext)) return FALSE;
  1090. #else
  1091. if ( !name ) return FALSE;
  1092. #endif
  1093. STR_VEC vtnames;
  1094. if (bsubfolder)
  1095. {
  1096. if (!getnames_findin_subfolder(folder, findext, &vtnames))
  1097. return FALSE;
  1098. }
  1099. else
  1100. {
  1101. if (!getnames_findout_subfolder(folder, findext, &vtnames))
  1102. return FALSE;
  1103. }
  1104. return comparename_findin_names(name, vtnames);
  1105. }
  1106. INT filehelper::comparenames_findin_names(IN STR_VEC vtSrcnames, IN STR_VEC vtDesnames, OUT STR_VEC *pvtIsonym /* = NULL */)
  1107. {
  1108. if (vtSrcnames.size() == 0 || vtDesnames.size() == 0) return 0;
  1109. INT nCount = 0;
  1110. for (STR_VEC::iterator it1 = vtSrcnames.begin(); it1 != vtSrcnames.end(); it1++)
  1111. {
  1112. for (STR_VEC::iterator it2 = vtDesnames.begin(); it2 != vtDesnames.end(); it2++)
  1113. {
  1114. if (_tcsicmp(it1->c_str(), it2->c_str()) == 0)
  1115. {
  1116. nCount++;
  1117. if (pvtIsonym)
  1118. pvtIsonym->push_back(*it1);
  1119. break;
  1120. }
  1121. }
  1122. }
  1123. return nCount;
  1124. }
  1125. INT filehelper::comparenames_findin_files(IN STR_VEC vtnames, IN STR_VEC vtfiles, IN LPCTSTR findext, OUT STR_VEC *pvtIsonym /* = NULL */)
  1126. {
  1127. if (vtnames.size() == 0 || vtfiles.size() == 0) return 0;
  1128. #if USE_IMGEXT
  1129. if (!iscorrectext(findext)) return 0;
  1130. #endif
  1131. INT nCount = 0;
  1132. for (STR_VEC::iterator it = vtnames.begin(); it != vtnames.end(); it++)
  1133. {
  1134. if (comparename_findin_files(it->c_str(), vtfiles))
  1135. {
  1136. if (pvtIsonym)
  1137. pvtIsonym->push_back(*it);
  1138. nCount++;
  1139. }
  1140. }
  1141. return nCount;
  1142. }
  1143. INT filehelper::comparenames_findin_folder(IN STR_VEC vtnames, IN LPCTSTR folder, IN BOOL bsubfolder, IN LPCTSTR findext, OUT STR_VEC *pvtIsonym /* = NULL */)
  1144. {
  1145. if (vtnames.size() == 0 || !PathFileExists(folder)) return 0;
  1146. #if USE_IMGEXT
  1147. if (!iscorrectext(findext)) return 0;
  1148. #endif
  1149. STR_VEC vtnames2;
  1150. if (bsubfolder)
  1151. {
  1152. getnames_findin_subfolder(folder, findext, &vtnames2);
  1153. }
  1154. else
  1155. {
  1156. getnames_findout_subfolder(folder, findext, &vtnames2);
  1157. }
  1158. return comparenames_findin_names(vtnames, vtnames2, pvtIsonym);
  1159. }
  1160. //////////////////////////////////////////////////////////////////////////
  1161. BOOL filehelper::comparefile_findin_names(IN LPCTSTR file, IN STR_VEC& vtnames)
  1162. {
  1163. if (vtnames.size() == 0) return FALSE;
  1164. if (!file || !PathFileExists(file)) return FALSE;
  1165. TString strfile = file;
  1166. TString name = getfilename(strfile);
  1167. return comparename_findin_names(name.c_str(), vtnames);
  1168. }
  1169. BOOL filehelper::comparefile_findin_files(IN LPCTSTR file, IN STR_VEC& vtfiles, IN LPCTSTR findext)
  1170. {
  1171. if (!file || !PathFileExists(file)) return FALSE;
  1172. #if USE_IMGEXT
  1173. if (!iscorrectext(findext)) return FALSE;
  1174. #endif
  1175. TString strfile = file;
  1176. TString name = getfilename(strfile);
  1177. // 过滤掉不需要的扩展名;
  1178. keepdownbyext(findext, vtfiles);
  1179. return comparename_findin_files(name.c_str(), vtfiles);
  1180. }
  1181. BOOL filehelper::comparefile_findin_folder(IN LPCTSTR file, IN LPCTSTR folder, IN BOOL bsubfolder, IN LPCTSTR findext)
  1182. {
  1183. if (!file || !PathFileExists(file) || !folder || !PathFileExists(folder)) return FALSE;
  1184. #if USE_IMGEXT
  1185. if (!iscorrectext(findext)) return FALSE;
  1186. #endif
  1187. TString strfile = file;
  1188. TString name = getfilename(strfile);
  1189. STR_VEC vtnames;
  1190. if (bsubfolder)
  1191. {
  1192. getnames_findin_subfolder(folder, findext, &vtnames);
  1193. }
  1194. else
  1195. {
  1196. getnames_findout_subfolder(folder, findext, &vtnames);
  1197. }
  1198. return comparename_findin_names(name.c_str(), vtnames);
  1199. }
  1200. INT filehelper::comparefiles_findin_files(IN STR_VEC &vtfiles1, IN STR_VEC &vtfiles2, IN LPCTSTR findext, OUT STR_VEC *pvtIsonym /* = NULL */)
  1201. {
  1202. if (vtfiles1.size() == 0 || vtfiles2.size() == 0) return 0;
  1203. #if USE_IMGEXT
  1204. if (!iscorrectext(findext)) return 0;
  1205. #endif
  1206. // 过滤掉不需要的扩展名;
  1207. keepdownbyext(findext, vtfiles1);
  1208. // 过滤掉不需要的扩展名;
  1209. keepdownbyext(findext, vtfiles2);
  1210. INT nCount = 0;
  1211. TString name;
  1212. for (STR_VEC::iterator it = vtfiles1.begin(); it != vtfiles1.end(); it++)
  1213. {
  1214. name = getfilename(*it);
  1215. if (comparename_findin_files(name.c_str(), vtfiles2))
  1216. {
  1217. if (pvtIsonym)
  1218. pvtIsonym->push_back(name);
  1219. nCount++;
  1220. }
  1221. }
  1222. return nCount;
  1223. }
  1224. INT filehelper::comparefiles_findin_folder(IN STR_VEC &vtfiles, IN LPCTSTR folder, IN BOOL bsubfolder, IN LPCTSTR findext, OUT STR_VEC *pvtIsonym /* = NULL */)
  1225. {
  1226. if (vtfiles.size() == 0 || !folder || !PathFileExists(folder)) return 0;
  1227. #if USE_IMGEXT
  1228. if (!iscorrectext(findext)) return 0;
  1229. #endif
  1230. STR_VEC vtnames;
  1231. if (bsubfolder)
  1232. {
  1233. getnames_findin_subfolder(folder, findext, &vtnames);
  1234. }
  1235. else
  1236. {
  1237. getnames_findout_subfolder(folder, findext, &vtnames);
  1238. }
  1239. return comparenames_findin_files(vtnames, vtfiles, findext, pvtIsonym);
  1240. }
  1241. INT filehelper::comparefolderself(IN LPCTSTR folder, IN LPCTSTR findext, OUT STR_VEC *pvtIsonym /* = NULL */)
  1242. {
  1243. OutputDebugString(_T("\n"));
  1244. #if USE_IMGEXT
  1245. if (!folder || !PathFileExists(folder) || !iscorrectext(findext)) return 0;
  1246. #else
  1247. if (!folder || !PathFileExists(folder) ) return 0;
  1248. #endif
  1249. STR_VEC vtsubfolders;
  1250. vtsubfolders.push_back(folder); // 包含当前目录;
  1251. getsubfolder(folder, &vtsubfolders);
  1252. int n = vtsubfolders.size();
  1253. STR_VEC *pvtfiles = new STR_VEC[n];
  1254. for (STR_VEC::iterator it = vtsubfolders.begin(); it != vtsubfolders.end(); it++)
  1255. {
  1256. getfiles_findin_subfolder(it->c_str(), findext, &pvtfiles[--n]);
  1257. }
  1258. STR_VEC vtnames;
  1259. n = vtsubfolders.size();
  1260. TString name;
  1261. for (int i = 0; i < n; i++)
  1262. {
  1263. for (STR_VEC::iterator it = pvtfiles[i].begin(); it != pvtfiles[i].end(); it++)
  1264. {
  1265. name = getfilename(*it);
  1266. if (comparename_findin_names(name.c_str(), vtnames))
  1267. {
  1268. // 打印日志,提示客户重名的相片;
  1269. OutputDebugString(it->c_str());
  1270. OutputDebugString(_T("\n"));
  1271. pvtIsonym->push_back(it->c_str());
  1272. }
  1273. else
  1274. {
  1275. vtnames.push_back(name);
  1276. }
  1277. }
  1278. }
  1279. if (pvtfiles)
  1280. delete []pvtfiles;
  1281. pvtfiles = NULL;
  1282. return 0;
  1283. }
  1284. INT filehelper::comparefolder_findin_folder(IN LPCTSTR folder1, IN LPCTSTR folder2, IN BOOL bsubfolder, IN LPCTSTR findext, OUT STR_VEC *pvtIsonym /* = NULL */)
  1285. {
  1286. return 0;
  1287. }
  1288. INT filehelper::copyfolder(IN LPCTSTR from, IN LPCTSTR to)
  1289. {
  1290. if (to == NULL || from == NULL)
  1291. return -1;
  1292. // 创建目录;
  1293. int nleft = 0;
  1294. int nIndex = -1;
  1295. TString strTo = to;
  1296. if (strTo.at(strTo.size()-1) != _T('\\'))
  1297. strTo.append(_T("\\"));
  1298. // 共享路径和硬盘盘符;
  1299. if (_tcscmp(strTo.substr(0, 2).c_str(), _T("\\\\")) == 0)
  1300. nleft = 2;
  1301. else if (strTo.at(2) == _T('\\'))
  1302. nleft = 3;
  1303. do
  1304. {
  1305. nIndex = strTo.substr(nleft, -1).find_first_of(_T("\\"));
  1306. if (nIndex != TString::npos)
  1307. {
  1308. if (_tmkdir(strTo.substr(0, nIndex + nleft).c_str()) == -1 && errno != EEXIST)
  1309. break;
  1310. nleft += nIndex + 1;
  1311. }
  1312. } while (nIndex!=-1);
  1313. return 0;
  1314. }
  1315. #endif