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); } }