In a few of the tools that I have written, I have needed to list the windows file system recursively. While .Net makes this much easier, all of the tools I write are in win32 C. Hopefully this will help someone else, as when I looked for information on this I did not find very much.
static void RecurseFileSystem ( TCHAR * StartingPath )
{
HANDLE CurrentFileHandle ;
WIN32_FIND_DATA FileInformation ;
TCHAR CurrentFileName [ MAX_PATH ];
TCHAR m_szFolderInitialPath [ MAX_PATH ];
TCHAR wildCard [ MAX_PATH ] = TEXT ( " \\ *.*" );
_tcscpy_s ( CurrentFileName , MAX_PATH , StartingPath );
_tcscpy_s ( m_szFolderInitialPath , MAX_PATH , StartingPath );
_tcsncat_s ( m_szFolderInitialPath , MAX_PATH , wildCard , MAX_PATH );
CurrentFileHandle = FindFirstFile ( m_szFolderInitialPath , & FileInformation );
if ( CurrentFileHandle != INVALID_HANDLE_VALUE )
{
do
{
if (
( _tcscmp ( FileInformation . cFileName , TEXT ( "." ) ) != 0 )
&&
( _tcscmp ( FileInformation . cFileName , TEXT ( ".." )) != 0 ))
{
_tcscpy_s ( CurrentFileName , MAX_PATH , StartingPath );
_tcsncat_s ( CurrentFileName , MAX_PATH , TEXT ( " \\ /**/" ), MAX_PATH );
_tcsncat_s ( CurrentFileName , MAX_PATH , FileInformation . cFileName , MAX_PATH );
if ( FileInformation . dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
{
RecurseFileSystem ( CurrentFileName );
}
else
{
/* Do action on file here! */
}
}
}
while ( FindNextFile ( CurrentFileHandle , & FileInformation ) == TRUE );
FindClose ( CurrentFileHandle );
}
}