File Annotation

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