5128eecc9f 2011-02-23 kinaba: //--- K.I.LIB --- 5128eecc9f 2011-02-23 kinaba: // kl_find.h : FindFirstFile wrapper 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: #include "stdafx.h" 5128eecc9f 2011-02-23 kinaba: #include "kilib.h" 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: #define isDots(p) (*p=='.' && (p[1]=='\0' || (p[1]=='.' && p[2]=='\0'))) 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: bool kiFindFile::findfirst( const char* wild, WIN32_FIND_DATA* pfd ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: HANDLE xh = ::FindFirstFile( wild, pfd ); 5128eecc9f 2011-02-23 kinaba: if( xh==INVALID_HANDLE_VALUE ) 5128eecc9f 2011-02-23 kinaba: return false; 5128eecc9f 2011-02-23 kinaba: while( isDots(pfd->cFileName) ) 5128eecc9f 2011-02-23 kinaba: if( !::FindNextFile( xh, pfd ) ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: ::FindClose( xh ); 5128eecc9f 2011-02-23 kinaba: return false; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: ::FindClose( xh ); 5128eecc9f 2011-02-23 kinaba: return true; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: void kiFindFile::close() 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: first=true; 5128eecc9f 2011-02-23 kinaba: if( h!=INVALID_HANDLE_VALUE ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: ::FindClose( h ), h=INVALID_HANDLE_VALUE; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: bool kiFindFile::begin( const char* wild ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: close(); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: h = ::FindFirstFile( wild, &fd ); 5128eecc9f 2011-02-23 kinaba: if( h==INVALID_HANDLE_VALUE ) 5128eecc9f 2011-02-23 kinaba: return false; 5128eecc9f 2011-02-23 kinaba: while( isDots(fd.cFileName) ) 5128eecc9f 2011-02-23 kinaba: if( !::FindNextFile( h, &fd ) ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: close(); 5128eecc9f 2011-02-23 kinaba: return false; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: return true; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: bool kiFindFile::next( WIN32_FIND_DATA* pfd ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: if( h==INVALID_HANDLE_VALUE ) 5128eecc9f 2011-02-23 kinaba: return false; 5128eecc9f 2011-02-23 kinaba: if( first ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: first = false; 5128eecc9f 2011-02-23 kinaba: ki_memcpy( pfd, &fd, sizeof(fd) ); 5128eecc9f 2011-02-23 kinaba: return true; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: if( !::FindNextFile( h, pfd ) ) 5128eecc9f 2011-02-23 kinaba: return false; 5128eecc9f 2011-02-23 kinaba: while( isDots(fd.cFileName) ) 5128eecc9f 2011-02-23 kinaba: if( !::FindNextFile( h, pfd ) ) 5128eecc9f 2011-02-23 kinaba: return false; 5128eecc9f 2011-02-23 kinaba: return true; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: #undef isDots