Dateien in einem Verzeichnis auflisten (FindFirstFile/FindNextFile)



  • Moin!!

    Kennt jemand ein Algorithmus um alle Dateien eines Verzeichnises auszulesen?? Irgendwas mit FindFirstFile und FindNextFile, aber wie soll ich das anwenden (->Beispiel)?? Und kennt jemand eine Funktion um alle Unterverzeichnisse herauszubekommen??

    Danke schon mal an dieser Stelle, dass ihr euch die Mühe macht meine Probleme zu lesen und hoffe, dass ihr sie für mich auch lösen könnt 🙂

    Lenin

    [ Dieser Beitrag wurde am 18.06.2002 um 14:10 Uhr von geeky editiert. ]



  • Schau dir das mal an:
    Bewegen in Verzeichnissen unter Unix

    ist zwar für Unix gedacht aber sind denk ich viele Sachen drin die man leicht übertragen kann 🙂

    bis denne, Schmelly



  • Mal sehen, ob ich ein Beispiel aus dem Kopf hinkriege:

    HANDLE fHandle;
    WIN32_FIND_DATA wfd;
    
    // Erste Datei im Verzeichnis "c:\windows\desktop\" holen:
    // aufgrund von "alten Zeiten" ist das erste immer ein "."
    // kann also ignoriert werden.
    fHandle=FindFirstFile("c:\\windows\\desktop\\*",&wfd);
    
    // Ergebnis Nummer 2 ist auch uninteressant (ist ".."):
    FindNextFile(fHandle,&wfd);
    
    while (FindNextFile(fHandle,&wfd))
    {
        if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
           // Datei ist keine, sondern ein Verzeichnis...
           // Hier könnte man dasselbe nochmal machen, um auch die 
           // Unterverzeichnisse zu scannen ;-)
        }
        else
        {
            MessageBox(0,wfd.cFileName,"Folgende Datei gefunden:",0);
        }
    }
    FindClose(fHandle);
    


  • Danke!! Hat super geklappt!!!!

    Kann ja jemand mal in die FAQ stellen.........

    Lenin



  • Da bei dem Code noch einige Fehler aufgetaucht sind, hier mal meine aktualisierte Variante:

    HANDLE fHandle;
    WIN32_FIND_DATA wfd;
    
    fHandle=FindFirstFile("C:\\*",&wfd);
    
    do
    {
    	// Eintrag nur behandeln, wenn es nicht . oder .. ist (werden nur bei Unterverzeichnissen mit zurückgeliefert)
    	// hier könnte man z.B. auch mit lstrcmp auf . und .. vergleichen, was allerdings nicht ganz so effizient ist
    	if (!( (wfd.cFileName[0]=='.') && ( (wfd.cFileName[1]=='.' && wfd.cFileName[2]==0) || wfd.cFileName[1]==0 ) ))
    	{
    		if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    		{
    			MessageBox(0,wfd.cFileName,"Folgendes Verzeichnis wurde gefunden:",0);
    			// Datei ist keine, sondern ein Verzeichnis...
    			// Hier könnte man dasselbe nochmal machen, um auch die
    			// Unterverzeichnisse zu scannen ;-)
    		}
    		else
    		{
    			MessageBox(0,wfd.cFileName,"Folgende Datei gefunden:",0);
    		}
    	}
    }
    while (FindNextFile(fHandle,&wfd));
    FindClose(fHandle);
    

Log in to reply