M
So, ich hab das mal programmiert. Soweit ich es getestet hab funktioniert es ganz gut. Du kannst den Code, der für jedes Verzeichnis ausgeführt werden soll, an der kommentierten Stelle einfügen (am besten einen Funktionsaufruf, der Übersicht halber). Beschwert euch nicht, wenn der Code in irgendeiner Form ineffizient oder unelegant sein sollte. Ich programmiere vorwiegend in Assembler und nicht in C. Aufgerufen werden sollte die Funktion DirectoryTraversal, der der Startpfad übergeben werden soll. Vielleicht ist dieser Code ja auch was für die FAQ, wenn da nicht bereits was ähnliches stehen sollte. Genug der Worte, lasst Code sprechen:
/* directory traversal written by Malfunction */
void RecurseDirectories(void)
{
static WIN32_FIND_DATA findData;
HANDLE findHandle;
/* insert your code in here */
findHandle=FindFirstFile("*.*",&findData);
while(findHandle!=INVALID_HANDLE_VALUE)
{
if(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(strcmp(".",(char *)&findData.cFileName) &&
strcmp("..",(char *)&findData.cFileName))
{
SetCurrentDirectory((char *)&findData.cFileName);
RecurseDirectories();
SetCurrentDirectory("..");
}
}
if(!FindNextFile(findHandle,&findData)) break;
}
FindClose(findHandle);
return;
}
void DirectoryTraversal(const char *startDir)
{
char CurrentDir[MAX_PATH];
GetCurrentDirectory(MAX_PATH,(char *)&CurrentDir);
SetCurrentDirectory(startDir);
RecurseDirectories();
SetCurrentDirectory((char *)&CurrentDir);
return;
}