File Annotation

Not logged in
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