filehelp.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661
  1. #include "StdAfx.h"
  2. #include "filehelp.h"
  3. #include <shlwapi.h>
  4. namespace filehelping
  5. {
  6. filehelpImpl::filehelpImpl(void)
  7. {
  8. }
  9. filehelpImpl::~filehelpImpl(void)
  10. {
  11. }
  12. //////////////////////////////////////////////////////////////////////////
  13. BOOL filehelpImpl::getall(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN OUT STR_VEC *pvtfiles, IN OUT STR_VEC *pvtnames, IN OUT STR_VEC *pvtnames_noext, IN OUT STR_VEC *pvtfolders)
  14. {
  15. // 路径不存在;
  16. if (!PathFileExists(lpfolder))
  17. return FALSE;
  18. // 指针空;
  19. if (!pvtfiles || !pvtnames || !pvtfolders || !pvtnames_noext) return FALSE;
  20. m_pvtfiles = pvtfiles;
  21. m_pvtnames = pvtnames;
  22. m_pvtfolders = pvtfolders;
  23. m_pvtnames_noext = pvtnames_noext;
  24. // 判断扩展名有效性;
  25. if (!iscorrectext(lpfindext)) return FALSE;
  26. findall(lpfolder, lpfindext);
  27. return TRUE;
  28. }
  29. BOOL filehelpImpl::getsubfolder(IN LPCTSTR lpfolder, IN STR_VEC *pvtfolders)
  30. {
  31. // 路径不存在;
  32. if (!PathFileExists(lpfolder))
  33. return FALSE;
  34. // 指针空;
  35. if (pvtfolders == NULL) return FALSE;
  36. m_pvtfolders = pvtfolders;
  37. findsubfolder(lpfolder);
  38. return TRUE;
  39. }
  40. BOOL filehelpImpl::getallsubfolder(IN LPCTSTR lpfolder, IN STR_VEC *pvtfolders)
  41. {
  42. // 路径不存在;
  43. if (!PathFileExists(lpfolder))
  44. return FALSE;
  45. // 指针空;
  46. if (pvtfolders == NULL) return FALSE;
  47. m_pvtfolders = pvtfolders;
  48. findallsubfolder(lpfolder);
  49. return TRUE;
  50. }
  51. //////////////////////////////////////////////////////////////////////////
  52. BOOL filehelpImpl::getfiles_findin_subfolder(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtfiles)
  53. {
  54. // 路径不存在;
  55. if (!PathFileExists(lpfolder))
  56. return FALSE;
  57. // 指针空;
  58. if (pvtfiles == NULL) return FALSE;
  59. m_pvtfiles = pvtfiles;
  60. // 判断扩展名有效性;
  61. if (!iscorrectext(lpfindext)) return FALSE;
  62. findfiles_findin_subfolder(lpfolder, lpfindext);
  63. return TRUE;
  64. }
  65. BOOL filehelpImpl::getfiles_findout_subfolder(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtfiles)
  66. {
  67. // 路径不存在;
  68. if (!PathFileExists(lpfolder))
  69. return FALSE;
  70. // 指针空;
  71. if (pvtfiles == NULL) return FALSE;
  72. m_pvtfiles = pvtfiles;
  73. // 判断扩展名有效性;
  74. if (!iscorrectext(lpfindext)) return FALSE;
  75. findfiles_findout_subfolder(lpfolder, lpfindext);
  76. return TRUE;
  77. }
  78. BOOL filehelpImpl::getfiles_within_subfolder(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtfiles)
  79. {
  80. // 路径不存在;
  81. if (!PathFileExists(lpfolder))
  82. return FALSE;
  83. // 指针空;
  84. if (pvtfiles == NULL) return FALSE;
  85. m_pvtfiles = pvtfiles;
  86. // 判断扩展名有效性;
  87. if (!iscorrectext(lpfindext)) return FALSE;
  88. findfiles_within_subfolder(lpfolder, lpfindext);
  89. return TRUE;
  90. }
  91. //////////////////////////////////////////////////////////////////////////
  92. BOOL filehelpImpl::getnames_findin_subfolder(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtnames)
  93. {
  94. // 路径不存在;
  95. if (!PathFileExists(lpfolder))
  96. return FALSE;
  97. // 指针空;
  98. if (pvtnames == NULL) return FALSE;
  99. m_pvtnames = pvtnames;
  100. // 判断扩展名有效性;
  101. if (!iscorrectext(lpfindext)) return FALSE;
  102. findnames_findin_subfolder(lpfolder, lpfindext);
  103. return TRUE;
  104. }
  105. BOOL filehelpImpl::getnames_findout_subfolder(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtnames)
  106. {
  107. // 路径不存在;
  108. if (!PathFileExists(lpfolder))
  109. return FALSE;
  110. // 指针空;
  111. if (pvtnames == NULL) return FALSE;
  112. m_pvtnames = pvtnames;
  113. // 判断扩展名有效性;
  114. if (!iscorrectext(lpfindext)) return FALSE;
  115. findnames_findout_subfolder(lpfolder, lpfindext);
  116. return TRUE;
  117. }
  118. BOOL filehelpImpl::getnames_within_subfolder(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtnames)
  119. {
  120. // 路径不存在;
  121. if (!PathFileExists(lpfolder))
  122. return FALSE;
  123. // 指针空;
  124. if (pvtnames == NULL) return FALSE;
  125. m_pvtnames = pvtnames;
  126. // 判断扩展名有效性;
  127. if (!iscorrectext(lpfindext)) return FALSE;
  128. findnames_within_subfolder(lpfolder, lpfindext);
  129. return TRUE;
  130. }
  131. //////////////////////////////////////////////////////////////////////////
  132. BOOL filehelpImpl::getnames_findin_subfolder_ex(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtnames)
  133. {
  134. // 路径不存在;
  135. if (!PathFileExists(lpfolder))
  136. return FALSE;
  137. // 指针空;
  138. if (pvtnames == NULL) return FALSE;
  139. m_pvtnames_noext = pvtnames;
  140. // 判断扩展名有效性;
  141. if (!iscorrectext(lpfindext)) return FALSE;
  142. findnames_findin_subfolder_ex(lpfolder, lpfindext);
  143. return TRUE;
  144. }
  145. BOOL filehelpImpl::getnames_findout_subfolder_ex(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtnames)
  146. {
  147. // 路径不存在;
  148. if (!PathFileExists(lpfolder))
  149. return FALSE;
  150. // 指针空;
  151. if (pvtnames == NULL) return FALSE;
  152. m_pvtnames_noext = pvtnames;
  153. // 判断扩展名有效性;
  154. if (!iscorrectext(lpfindext)) return FALSE;
  155. findnames_findout_subfolder_ex(lpfolder, lpfindext);
  156. return TRUE;
  157. }
  158. BOOL filehelpImpl::getnames_within_subfolder_ex(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtnames)
  159. {
  160. // 路径不存在;
  161. if (!PathFileExists(lpfolder))
  162. return FALSE;
  163. // 指针空;
  164. if (pvtnames == NULL) return FALSE;
  165. m_pvtnames_noext = pvtnames;
  166. // 判断扩展名有效性;
  167. if (!iscorrectext(lpfindext)) return FALSE;
  168. findnames_within_subfolder_ex(lpfolder, lpfindext);
  169. return TRUE;
  170. }
  171. //////////////////////////////////////////////////////////////////////////
  172. BOOL filehelpImpl::getfilesnames_findin_subfolder(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtfiles, IN STR_VEC *pvtnames)
  173. {
  174. // 路径不存在;
  175. if (!PathFileExists(lpfolder))
  176. return FALSE;
  177. // 指针空;
  178. if (pvtnames || !pvtnames) return FALSE;
  179. m_pvtfiles = pvtfiles;
  180. m_pvtnames = pvtnames;
  181. // 判断扩展名有效性;
  182. if (!iscorrectext(lpfindext)) return FALSE;
  183. findfilesnames_findin_subfolder(lpfolder, lpfindext);
  184. return TRUE;
  185. }
  186. BOOL filehelpImpl::getfilesnames_findout_subfolder(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtfiles, IN STR_VEC *pvtnames)
  187. {
  188. // 路径不存在;
  189. if (!PathFileExists(lpfolder))
  190. return FALSE;
  191. // 指针空;
  192. if (pvtnames || !pvtnames) return FALSE;
  193. m_pvtfiles = pvtfiles;
  194. m_pvtnames = pvtnames;
  195. // 判断扩展名有效性;
  196. if (!iscorrectext(lpfindext)) return FALSE;
  197. findfilesnames_findout_subfolder(lpfolder, lpfindext);
  198. return TRUE;
  199. }
  200. BOOL filehelpImpl::getfilesnames_within_subfolder(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtfiles, IN STR_VEC *pvtnames)
  201. {
  202. // 路径不存在;
  203. if (!PathFileExists(lpfolder))
  204. return FALSE;
  205. // 指针空;
  206. if (pvtnames || !pvtnames) return FALSE;
  207. m_pvtfiles = pvtfiles;
  208. m_pvtnames = pvtnames;
  209. // 判断扩展名有效性;
  210. if (!iscorrectext(lpfindext)) return FALSE;
  211. findfilesnames_within_subfolder(lpfolder, lpfindext);
  212. return TRUE;
  213. }
  214. //////////////////////////////////////////////////////////////////////////
  215. BOOL filehelpImpl::getfilesnames_findin_subfolder_ex(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtfiles, IN STR_VEC *pvtnames)
  216. {
  217. // 路径不存在;
  218. if (!PathFileExists(lpfolder))
  219. return FALSE;
  220. // 指针空;
  221. if (pvtnames || !pvtnames) return FALSE;
  222. m_pvtfiles = pvtfiles;
  223. m_pvtnames_noext = pvtnames;
  224. // 判断扩展名有效性;
  225. if (!iscorrectext(lpfindext)) return FALSE;
  226. findfilesnames_findin_subfolder_ex(lpfolder, lpfindext);
  227. return TRUE;
  228. }
  229. BOOL filehelpImpl::getfilesnames_findout_subfolder_ex(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtfiles, IN STR_VEC *pvtnames)
  230. {
  231. // 路径不存在;
  232. if (!PathFileExists(lpfolder))
  233. return FALSE;
  234. // 指针空;
  235. if (pvtnames || !pvtnames) return FALSE;
  236. m_pvtfiles = pvtfiles;
  237. m_pvtnames_noext = pvtnames;
  238. // 判断扩展名有效性;
  239. if (!iscorrectext(lpfindext)) return FALSE;
  240. findfilesnames_findout_subfolder_ex(lpfolder, lpfindext);
  241. return TRUE;
  242. }
  243. BOOL filehelpImpl::getfilesnames_within_subfolder_ex(IN LPCTSTR lpfolder, IN LPCTSTR lpfindext, IN STR_VEC *pvtfiles, IN STR_VEC *pvtnames)
  244. {
  245. // 路径不存在;
  246. if (!PathFileExists(lpfolder))
  247. return FALSE;
  248. // 指针空;
  249. if (pvtnames || !pvtnames) return FALSE;
  250. m_pvtfiles = pvtfiles;
  251. m_pvtnames_noext = pvtnames;
  252. // 判断扩展名有效性;
  253. if (!iscorrectext(lpfindext)) return FALSE;
  254. findfilesnames_within_subfolder_ex(lpfolder, lpfindext);
  255. return TRUE;
  256. }
  257. #if 1
  258. //////////////////////////////////////////////////////////////////////////
  259. BOOL filehelpImpl::comparename_2file(IN LPCTSTR file1, IN LPCTSTR file2)
  260. {
  261. if (!file1 || !file2) return FALSE;
  262. if (!PathFileExists(file1) || !PathFileExists(file2))
  263. return FALSE;
  264. TString strfile1 = file1;
  265. TString strfile2 = file2;
  266. strfile1 = getfilename(strfile1);
  267. strfile2 = getfilename(strfile2);
  268. return !strfile1.compare(strfile2);
  269. }
  270. BOOL filehelpImpl::comparename_findin_names(IN LPCTSTR name)
  271. {
  272. if (!name || m_pvtnames_noext) return FALSE;
  273. TString strname = name;
  274. uppercase(strname);
  275. for (STR_VEC::iterator it = m_pvtnames_noext->begin(); it != m_pvtnames_noext->end(); it++)
  276. {
  277. uppercase(*it);
  278. if (it->compare(strname) == 0)
  279. {
  280. // 打印日志,或提示用户同名文件路径在哪;
  281. return TRUE;
  282. }
  283. }
  284. return FALSE;
  285. }
  286. BOOL filehelpImpl::comparename_findin_names(IN LPCTSTR name, IN STR_VEC &vtnames)
  287. {
  288. if (!name) return FALSE;
  289. TString strname = name;
  290. uppercase(strname);
  291. for (STR_VEC::iterator it = vtnames.begin(); it != vtnames.end(); it++)
  292. {
  293. uppercase(*it);
  294. if (it->compare(strname) == 0)
  295. {
  296. // 打印日志,或提示用户同名文件路径在哪;
  297. return TRUE;
  298. }
  299. }
  300. return FALSE;
  301. }
  302. BOOL filehelpImpl::comparename_findin_files(IN LPCTSTR name, IN STR_VEC &vtfiles)
  303. {
  304. if (!name) return FALSE;
  305. int nIndex = 0;
  306. TString strfile;
  307. TString strname = name;
  308. uppercase(strname);
  309. for (STR_VEC::iterator it = vtfiles.begin(); it != vtfiles.end(); it++)
  310. {
  311. if ((nIndex = it->find_last_of(_T('\\'))) != TString::npos)
  312. {
  313. strfile = it->substr(nIndex);
  314. uppercase(strfile);
  315. if (strfile.compare(strname) == 0)
  316. {
  317. // 打印日志,或提示用户同名文件路径在哪;
  318. return TRUE;
  319. }
  320. }
  321. }
  322. return FALSE;
  323. }
  324. BOOL filehelpImpl::comparename_findin_folder(IN LPCTSTR name, IN LPCTSTR folder, IN LPCTSTR findext, IN BOOL bsubfolder)
  325. {
  326. if (!name || !iscorrectext(findext)) return FALSE;
  327. STR_VEC vtnames;
  328. if (bsubfolder)
  329. {
  330. if (!getnames_findin_subfolder_ex(folder, findext, &vtnames))
  331. return FALSE;
  332. }
  333. else
  334. {
  335. if (!getnames_findout_subfolder_ex(folder, findext, &vtnames))
  336. return FALSE;
  337. }
  338. return comparename_findin_names(name, vtnames);
  339. }
  340. INT filehelpImpl::comparenames_findin_names(IN STR_VEC vtSrcnames, IN STR_VEC vtDesnames, OUT STR_VEC *pvtIsonym /* = NULL */)
  341. {
  342. if (vtSrcnames.size() == 0 || vtDesnames.size() == 0) return 0;
  343. INT nCount = 0;
  344. for (STR_VEC::iterator it1 = vtSrcnames.begin(); it1 != vtSrcnames.end(); it1++)
  345. {
  346. for (STR_VEC::iterator it2 = vtDesnames.begin(); it2 != vtDesnames.end(); it2++)
  347. {
  348. uppercase(*it1);
  349. uppercase(*it2);
  350. if (it1->compare(*it2) == 0)
  351. {
  352. nCount++;
  353. if (pvtIsonym)
  354. pvtIsonym->push_back(*it1);
  355. break;
  356. }
  357. }
  358. }
  359. return nCount;
  360. }
  361. INT filehelpImpl::comparenames_findin_files(IN STR_VEC vtnames, IN STR_VEC vtfiles, IN LPCTSTR findext, OUT STR_VEC *pvtIsonym /* = NULL */)
  362. {
  363. if (vtnames.size() == 0 || vtfiles.size() == 0) return 0;
  364. if (!iscorrectext(findext)) return 0;
  365. INT nCount = 0;
  366. for (STR_VEC::iterator it = vtnames.begin(); it != vtnames.end(); it++)
  367. {
  368. if (comparename_findin_files(it->c_str(), vtfiles))
  369. {
  370. if (pvtIsonym)
  371. pvtIsonym->push_back(*it);
  372. nCount++;
  373. }
  374. }
  375. return nCount;
  376. }
  377. INT filehelpImpl::comparenames_findin_folder(IN STR_VEC vtnames, IN LPCTSTR folder, IN BOOL bsubfolder, IN LPCTSTR findext, OUT STR_VEC *pvtIsonym /* = NULL */)
  378. {
  379. if (vtnames.size() == 0 || !PathFileExists(folder)) return 0;
  380. if (!iscorrectext(findext)) return 0;
  381. STR_VEC vtnames2;
  382. if (bsubfolder)
  383. {
  384. getnames_findin_subfolder(folder, findext, &vtnames2);
  385. }
  386. else
  387. {
  388. getnames_findout_subfolder(folder, findext, &vtnames2);
  389. }
  390. return comparenames_findin_names(vtnames, vtnames2, pvtIsonym);
  391. }
  392. //////////////////////////////////////////////////////////////////////////
  393. BOOL filehelpImpl::comparefile_findin_names(IN LPCTSTR file, IN STR_VEC& vtnames)
  394. {
  395. if (vtnames.size() == 0) return FALSE;
  396. if (!file || !PathFileExists(file)) return FALSE;
  397. TString strfile = file;
  398. TString name = getfilename(strfile);
  399. return comparename_findin_names(name.c_str(), vtnames);
  400. }
  401. BOOL filehelpImpl::comparefile_findin_files(IN LPCTSTR file, IN STR_VEC& vtfiles, IN LPCTSTR findext)
  402. {
  403. if (!file || !PathFileExists(file)) return FALSE;
  404. if (!iscorrectext(findext)) return FALSE;
  405. TString strfile = file;
  406. TString name = getfilename(strfile);
  407. // 过滤掉不需要的扩展名;
  408. keepdownext(findext, vtfiles);
  409. return comparename_findin_files(name.c_str(), vtfiles);
  410. }
  411. BOOL filehelpImpl::comparefile_findin_folder(IN LPCTSTR file, IN LPCTSTR folder, IN BOOL bsubfolder, IN LPCTSTR findext)
  412. {
  413. if (!file || !PathFileExists(file) || !folder || !PathFileExists(folder)) return FALSE;
  414. if (!iscorrectext(findext)) return FALSE;
  415. TString strfile = file;
  416. TString name = getfilename(strfile);
  417. STR_VEC vtnames;
  418. if (bsubfolder)
  419. {
  420. getnames_findin_subfolder_ex(folder, findext, &vtnames);
  421. }
  422. else
  423. {
  424. getnames_findout_subfolder_ex(folder, findext, &vtnames);
  425. }
  426. return comparename_findin_names(name.c_str(), vtnames);
  427. }
  428. INT filehelpImpl::comparefiles_findin_files(IN STR_VEC &vtfiles1, IN STR_VEC &vtfiles2, IN LPCTSTR findext, OUT STR_VEC *pvtIsonym /* = NULL */)
  429. {
  430. if (vtfiles1.size() == 0 || vtfiles2.size() == 0) return 0;
  431. if (!iscorrectext(findext)) return 0;
  432. // 过滤掉不需要的扩展名;
  433. keepdownext(findext, vtfiles1);
  434. // 过滤掉不需要的扩展名;
  435. keepdownext(findext, vtfiles2);
  436. INT nCount = 0;
  437. TString name;
  438. for (STR_VEC::iterator it = vtfiles1.begin(); it != vtfiles1.end(); it++)
  439. {
  440. name = getfilename(*it);
  441. if (comparename_findin_files(name.c_str(), vtfiles2))
  442. {
  443. if (pvtIsonym)
  444. pvtIsonym->push_back(name);
  445. nCount++;
  446. }
  447. }
  448. return nCount;
  449. }
  450. INT filehelpImpl::comparefiles_findin_folder(IN STR_VEC &vtfiles, IN LPCTSTR folder, IN BOOL bsubfolder, IN LPCTSTR findext, OUT STR_VEC *pvtIsonym /* = NULL */)
  451. {
  452. if (vtfiles.size() == 0 || !folder || !PathFileExists(folder)) return 0;
  453. if (!iscorrectext(findext)) return 0;
  454. STR_VEC vtnames;
  455. if (bsubfolder)
  456. {
  457. getnames_findin_subfolder_ex(folder, findext, &vtnames);
  458. }
  459. else
  460. {
  461. getnames_findout_subfolder_ex(folder, findext, &vtnames);
  462. }
  463. return comparenames_findin_files(vtnames, vtfiles, findext, pvtIsonym);
  464. }
  465. INT filehelpImpl::comparefolderself(IN LPCTSTR folder, IN LPCTSTR findext, OUT STR_VEC *pvtIsonym /* = NULL */)
  466. {
  467. OutputDebugString(_T("\n"));
  468. if (!folder || !PathFileExists(folder) || !iscorrectext(findext)) return 0;
  469. STR_VEC vtsubfolders;
  470. vtsubfolders.push_back(folder); // 包含当前目录;
  471. getsubfolder(folder, &vtsubfolders);
  472. int n = vtsubfolders.size();
  473. STR_VEC *pvtfiles = new STR_VEC[n];
  474. for (STR_VEC::iterator it = vtsubfolders.begin(); it != vtsubfolders.end(); it++)
  475. {
  476. getfiles_findin_subfolder(it->c_str(), findext, &pvtfiles[--n]);
  477. }
  478. STR_VEC vtnames;
  479. n = vtsubfolders.size();
  480. TString name;
  481. for (int i = 0; i < n; i++)
  482. {
  483. for (STR_VEC::iterator it = pvtfiles[i].begin(); it != pvtfiles[i].end(); it++)
  484. {
  485. name = getfilename(*it);
  486. if (comparename_findin_names(name.c_str(), vtnames))
  487. {
  488. // 打印日志,提示客户重名的相片;
  489. OutputDebugString(it->c_str());
  490. OutputDebugString(_T("\n"));
  491. pvtIsonym->push_back(it->c_str());
  492. }
  493. else
  494. {
  495. vtnames.push_back(name);
  496. }
  497. }
  498. }
  499. if (pvtfiles)
  500. delete []pvtfiles;
  501. pvtfiles = NULL;
  502. return 0;
  503. }
  504. INT filehelpImpl::comparefolder_findin_folder(IN LPCTSTR folder1, IN LPCTSTR folder2, IN BOOL bsubfolder, IN LPCTSTR findext, OUT STR_VEC *pvtIsonym /* = NULL */)
  505. {
  506. return 0;
  507. }
  508. #endif
  509. };