Hex Artifact Content

Not logged in

Artifact b12e88bb918155c85195e96582926226c115f44a:


0000: 23 69 6e 63 6c 75 64 65 20 22 73 74 64 61 66 78  #include "stdafx
0010: 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20 22 66  .h"..#include "f
0020: 69 6e 64 2e 68 22 0d 0a 75 73 69 6e 67 20 6e 61  ind.h"..using na
0030: 6d 65 73 70 61 63 65 20 6b 69 3b 0d 0a 0d 0a 0d  mespace ki;.....
0040: 0a 0d 0a 2f 2f 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ...//===========
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0060: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0070: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0080: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a  ==============..
0090: 0d 0a 6e 61 6d 65 73 70 61 63 65 20 7b 0d 0a 73  ..namespace {..s
00a0: 74 61 74 69 63 20 69 6e 6c 69 6e 65 20 62 6f 6f  tatic inline boo
00b0: 6c 20 69 73 44 6f 74 73 28 63 6f 6e 73 74 20 54  l isDots(const T
00c0: 43 48 41 52 2a 20 70 29 0d 0a 7b 0d 0a 09 72 65  CHAR* p)..{...re
00d0: 74 75 72 6e 20 28 2a 70 3d 3d 27 2e 27 20 26 26  turn (*p=='.' &&
00e0: 20 28 70 5b 31 5d 3d 3d 27 5c 30 27 20 7c 7c 20   (p[1]=='\0' || 
00f0: 28 70 5b 31 5d 3d 3d 27 2e 27 20 26 26 20 70 5b  (p[1]=='.' && p[
0100: 32 5d 3d 3d 27 5c 30 27 29 29 29 3b 0d 0a 7d 0d  2]=='\0')));..}.
0110: 0a 7d 0d 0a 0d 0a 62 6f 6f 6c 20 46 69 6e 64 46  .}....bool FindF
0120: 69 6c 65 3a 3a 46 69 6e 64 46 69 72 73 74 28 20  ile::FindFirst( 
0130: 63 6f 6e 73 74 20 54 43 48 41 52 2a 20 77 69 6c  const TCHAR* wil
0140: 64 2c 20 57 49 4e 33 32 5f 46 49 4e 44 5f 44 41  d, WIN32_FIND_DA
0150: 54 41 2a 20 70 66 64 20 29 0d 0a 7b 0d 0a 09 48  TA* pfd )..{...H
0160: 41 4e 44 4c 45 20 78 68 20 3d 20 3a 3a 46 69 6e  ANDLE xh = ::Fin
0170: 64 46 69 72 73 74 46 69 6c 65 28 20 77 69 6c 64  dFirstFile( wild
0180: 2c 20 70 66 64 20 29 3b 0d 0a 09 69 66 28 20 78  , pfd );...if( x
0190: 68 3d 3d 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c  h==INVALID_HANDL
01a0: 45 5f 56 41 4c 55 45 20 29 0d 0a 09 09 72 65 74  E_VALUE )....ret
01b0: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 09 77 68 69  urn false;...whi
01c0: 6c 65 28 20 69 73 44 6f 74 73 28 70 66 64 2d 3e  le( isDots(pfd->
01d0: 63 46 69 6c 65 4e 61 6d 65 29 20 29 0d 0a 09 09  cFileName) )....
01e0: 69 66 28 20 21 3a 3a 46 69 6e 64 4e 65 78 74 46  if( !::FindNextF
01f0: 69 6c 65 28 20 78 68 2c 20 70 66 64 20 29 20 29  ile( xh, pfd ) )
0200: 0d 0a 09 09 7b 0d 0a 09 09 09 3a 3a 46 69 6e 64  ....{.....::Find
0210: 43 6c 6f 73 65 28 20 78 68 20 29 3b 0d 0a 09 09  Close( xh );....
0220: 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a  .return false;..
0230: 09 09 7d 0d 0a 09 3a 3a 46 69 6e 64 43 6c 6f 73  ..}...::FindClos
0240: 65 28 20 78 68 20 29 3b 0d 0a 09 72 65 74 75 72  e( xh );...retur
0250: 6e 20 74 72 75 65 3b 0d 0a 7d 0d 0a 0d 0a 76 6f  n true;..}....vo
0260: 69 64 20 46 69 6e 64 46 69 6c 65 3a 3a 43 6c 6f  id FindFile::Clo
0270: 73 65 28 29 0d 0a 7b 0d 0a 09 66 69 72 73 74 5f  se()..{...first_
0280: 20 3d 20 74 72 75 65 3b 0d 0a 09 69 66 28 20 68   = true;...if( h
0290: 61 6e 5f 20 21 3d 20 49 4e 56 41 4c 49 44 5f 48  an_ != INVALID_H
02a0: 41 4e 44 4c 45 5f 56 41 4c 55 45 20 29 0d 0a 09  ANDLE_VALUE )...
02b0: 09 3a 3a 46 69 6e 64 43 6c 6f 73 65 28 20 68 61  .::FindClose( ha
02c0: 6e 5f 20 29 2c 20 68 61 6e 5f 20 3d 20 49 4e 56  n_ ), han_ = INV
02d0: 41 4c 49 44 5f 48 41 4e 44 4c 45 5f 56 41 4c 55  ALID_HANDLE_VALU
02e0: 45 3b 0d 0a 7d 0d 0a 0d 0a 62 6f 6f 6c 20 46 69  E;..}....bool Fi
02f0: 6e 64 46 69 6c 65 3a 3a 42 65 67 69 6e 28 20 63  ndFile::Begin( c
0300: 6f 6e 73 74 20 54 43 48 41 52 2a 20 77 69 6c 64  onst TCHAR* wild
0310: 20 29 0d 0a 7b 0d 0a 09 43 6c 6f 73 65 28 29 3b   )..{...Close();
0320: 0d 0a 0d 0a 09 68 61 6e 5f 20 3d 20 3a 3a 46 69  .....han_ = ::Fi
0330: 6e 64 46 69 72 73 74 46 69 6c 65 28 20 77 69 6c  ndFirstFile( wil
0340: 64 2c 20 26 66 64 5f 20 29 3b 0d 0a 09 69 66 28  d, &fd_ );...if(
0350: 20 68 61 6e 5f 20 3d 3d 20 49 4e 56 41 4c 49 44   han_ == INVALID
0360: 5f 48 41 4e 44 4c 45 5f 56 41 4c 55 45 20 29 0d  _HANDLE_VALUE ).
0370: 0a 09 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b  ...return false;
0380: 0d 0a 0d 0a 09 77 68 69 6c 65 28 20 69 73 44 6f  .....while( isDo
0390: 74 73 28 66 64 5f 2e 63 46 69 6c 65 4e 61 6d 65  ts(fd_.cFileName
03a0: 29 20 29 0d 0a 09 09 69 66 28 20 21 3a 3a 46 69  ) )....if( !::Fi
03b0: 6e 64 4e 65 78 74 46 69 6c 65 28 20 68 61 6e 5f  ndNextFile( han_
03c0: 2c 20 26 66 64 5f 20 29 20 29 0d 0a 09 09 7b 0d  , &fd_ ) )....{.
03d0: 0a 09 09 09 43 6c 6f 73 65 28 29 3b 0d 0a 09 09  ....Close();....
03e0: 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a  .return false;..
03f0: 09 09 7d 0d 0a 09 72 65 74 75 72 6e 20 74 72 75  ..}...return tru
0400: 65 3b 0d 0a 7d 0d 0a 0d 0a 62 6f 6f 6c 20 46 69  e;..}....bool Fi
0410: 6e 64 46 69 6c 65 3a 3a 4e 65 78 74 28 20 57 49  ndFile::Next( WI
0420: 4e 33 32 5f 46 49 4e 44 5f 44 41 54 41 2a 20 70  N32_FIND_DATA* p
0430: 66 64 20 29 0d 0a 7b 0d 0a 09 69 66 28 20 68 61  fd )..{...if( ha
0440: 6e 5f 20 3d 3d 20 49 4e 56 41 4c 49 44 5f 48 41  n_ == INVALID_HA
0450: 4e 44 4c 45 5f 56 41 4c 55 45 20 29 0d 0a 09 09  NDLE_VALUE )....
0460: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
0470: 0a 09 69 66 28 20 66 69 72 73 74 5f 20 29 0d 0a  ..if( first_ )..
0480: 09 7b 0d 0a 09 09 66 69 72 73 74 5f 20 3d 20 66  .{....first_ = f
0490: 61 6c 73 65 3b 0d 0a 09 09 6d 65 6d 6d 6f 76 65  alse;....memmove
04a0: 28 20 70 66 64 2c 20 26 66 64 5f 2c 20 73 69 7a  ( pfd, &fd_, siz
04b0: 65 6f 66 28 66 64 5f 29 20 29 3b 0d 0a 09 09 72  eof(fd_) );....r
04c0: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 09 7d 0d  eturn true;...}.
04d0: 0a 09 69 66 28 20 21 3a 3a 46 69 6e 64 4e 65 78  ..if( !::FindNex
04e0: 74 46 69 6c 65 28 20 68 61 6e 5f 2c 20 70 66 64  tFile( han_, pfd
04f0: 20 29 20 29 0d 0a 09 09 72 65 74 75 72 6e 20 66   ) )....return f
0500: 61 6c 73 65 3b 0d 0a 09 77 68 69 6c 65 28 20 69  alse;...while( i
0510: 73 44 6f 74 73 28 66 64 5f 2e 63 46 69 6c 65 4e  sDots(fd_.cFileN
0520: 61 6d 65 29 20 29 0d 0a 09 09 69 66 28 20 21 3a  ame) )....if( !:
0530: 3a 46 69 6e 64 4e 65 78 74 46 69 6c 65 28 20 68  :FindNextFile( h
0540: 61 6e 5f 2c 20 70 66 64 20 29 20 29 0d 0a 09 09  an_, pfd ) )....
0550: 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a  .return false;..
0560: 09 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 7d  .return true;..}
0570: 0d 0a 0d 0a 23 75 6e 64 65 66 20 69 73 44 6f 74  ....#undef isDot
0580: 73 0d 0a                                         s..