Dateitypen in beliebiger Menge Unterverzeichnissen suchen



  • Hallo Comunity,

    mich quält derzeit das Problem, das ich auf meiner C:\ Partition alle *.inf-Files auflisten muss. Wie es für einen Ordner funktioniert steht ja schon in der FAQ. Wie schauts aber mit Unterordnern aus? Theoretisch hab ich mir gedacht, ich rufe meine eigene Funktion nochmals auf, falls ein Verzeichniss gefunden wird. Mein Problem ist derzeit, dass ich in einer Art Endlosschleife hänge, d.h. das letzte Verzeichnis wird enloserweiese durchsucht. Hier mal die Funktion:

    int getSubDirs(char (*modPath), char (*machineDirs)[200], int *machineCount)
    {
    
    	WIN32_FIND_DATA FileData;
    	HANDLE hSearch;
    	char searchPath[charlen]={0};
    	char RecPath[charlen]={0};
    	BOOL finished = FALSE;
    	int a=0, b=0;
    
    	sprintf(searchPath, "%s\\*.*", modPath);
    	printf("SearchPath is: %s\n", searchPath);
    
    	hSearch=FindFirstFile(searchPath, &FileData);
    	if(hSearch==INVALID_HANDLE_VALUE)
    		MessageBox(NULL, "Nothing found... :-(", "Some error just for you", MB_OK);
    
    	while(!finished)
    	{
    		FindNextFile(hSearch, &FileData);
    
    			if(FileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY && FileData.cFileName[0]!='.')
    			{
    				sprintf(RecPath, "%s\\%s", modPath, FileData.cFileName);
    				getSubDirs(RecPath, machineDirs, machineCount);
    
    				printf("%s is directory\n", FileData.cFileName);
    			}
    
    			a=strlen(FileData.cFileName);
    			for(b=0;b<a;b++)FileData.cFileName[b]=toupper(FileData.cFileName[b]);
    
    			if(FileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY && FileData.cFileName[a-1]=='F' && FileData.cFileName[a-2]=='N' && FileData.cFileName[a-3]=='I')
    			{
    				sprintf(machineDirs[*machineCount], "%s\\%s", modPath, FileData.cFileName);
    				*machineCount=*machineCount+1;
    			}
    
    			if(GetLastError() == ERROR_NO_MORE_FILES)
    			{
    				finished = TRUE;
    			}
    
    	}
    
    	FindClose(hSearch);
    
    	printf("%i: %s\n", *machineCount, machineDirs[*machineCount-1]);
    
    	SetLastError(0);
    
    	return 0;
    }
    

    In diesem Aufbau erhalte ich eine Endlosschleife. Lasse ich die SetLastError-Funktion weg, wird nur das erste Unterverzeichnis ausgelesen und die Funktion beendet.

    Kann mir jemand sagen, was ich falsch mache?

    Danke und Gruss
    Holgie



  • Vielleicht hilft dir das hier



  • Yo, hat bestens geholfen. Danke! 😃


Anmelden zum Antworten