Alle Ordner auflisten II



  • Wie verwaltet Windows Dateien?. Ich bekomme immer eine ewig lange List obwohl ich nur 1 Ordner mit zwei Unterordner habe. Mit Namen die es gar nicht gibt?

    #pragma warning (disable: 4786)
    
    #include <windows.h>
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    void OrdnerAufzaehlen(string dateiname);
    
    int main()
    {   
        OrdnerAufzaehlen("c:");
        return 0;
    }
    
    void OrdnerAufzaehlen(string dateiname)
    {
        HANDLE fHandle;
        WIN32_FIND_DATA wfd;
    
        string datei_zusm=dateiname+"\\*";
    
        fHandle=FindFirstFile(datei_zusm.c_str(),&wfd);
        while (FindNextFile(fHandle,&wfd))
        {
            if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
                cout<<"Ordnername :........"<<wfd.cFileName<<endl;
    
                    dateiname = dateiname + "\\" + wfd.cFileName;
                cout<<dateiname<<endl;
    
                OrdnerAufzaehlen(dateiname);
            }
        }
        FindClose(fHandle);
    }
    

    PS: Verbesserungsvorschläge erwünscht 😃

    EDIT: Die Funktion funktioniert ja gar nicht 😞 Weiter basteln

    [ Dieser Beitrag wurde am 28.03.2003 um 19:39 Uhr von Netzwerk-Latenz editiert. ]



  • Original erstellt von Netzwerk-Latenz:
    **Wie verwaltet Windows Dateien?. Ich bekomme immer eine ewig lange List obwohl ich nur 1 Ordner mit zwei Unterordner habe. Mit Namen die es gar nicht gibt?

    string datei_zusm=dateiname+"\\*";
    

    **

    Was hast Du denn hier vor?

    Strings zusammenfügen tun wir doch aber mit strcat, oder?

    Also:

    strcat(datei, dateiname);
    strcat(datei, "\\*");
    
    if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    

    Muß es hier nicht

    if ((wfd.dwFileAttributes) && (FILE_ATTRIBUTE_DIRECTORY))
    

    heißen?

    dateiname = dateiname + "\\" + wfd.cFileName;
    

    Schon wieder....

    strcat(dateiname, "\\");
    strcat(dateiname, wfd.cFileName);
    

    [ Dieser Beitrag wurde am 28.03.2003 um 19:46 Uhr von Hepi editiert. ]



  • Hi Netzerk-Leatenz

    Ich hatte das Problem auch mal.

    Du rufst in Deiner Schleife die Funktion rekursiv auf!

    Der rekursive Aufruf startet FindFirst wiederholt. Wenn das Programm aus der Rekursion zurueckkommt, ist die Frage, ob die Daten in WIN32_FIND_DATA wfd von vorheriger Ebene wieder gueltig sind.

    Bei mir (BCB) war der record zerstoert!!! Dann Rekursierte der sonstwohin.

    Ich hab alle Ordner- Namen in einer Liste gespeichert und NACH FindClose erst die Rekursionen abgearbeitet! Da gings dann ohne Probleme

    [ Dieser Beitrag wurde am 28.03.2003 um 20:55 Uhr von DerAltenburger editiert. ]



  • @DerAltenburger

    Werde ich so machen. Danke 🙂

    @Hepi

    C++ 😉



  • Original erstellt von Netzwerk-Latenz:
    **@Hepi

    C++ ;)**

    Dann habe ich nichts gesagt... 😉


Anmelden zum Antworten