//Editor's note: //COTD Entry: File Enumerator by Sam McGrath [sammy@dnai.com] void System_Dir(const char *directory, bool recurse, void(*dirCallback)(const char *dir), void(*fileCallback)(const char *filename)) { WIN32_FIND_DATA finddata; HANDLE handle; handle = FindFirstFile(directory, &finddata); if (handle == INVALID_HANDLE_VALUE) return; do { if (!(finddata.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) && !(finddata.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) && !(finddata.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY)) { if (finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (strcmp(finddata.cFileName, ".") && strcmp(finddata.cFileName, "..")) if (dirCallback) dirCallback(finddata.cFileName); } else { if (fileCallback) fileCallback(finddata.cFileName); } } } while (FindNextFile(handle, &finddata)); FindClose(handle); }