Verzeichnise durchsuchen (Rekursiv?)

Flolilan

Grünschnabel
Hallo Leute!

Ich hab ein kleines Problem!
Ich hab ein Programm das mir einen bestimmten
Ordner auflistet, d.h. alle Dateien und Ordner darin
und die Dauer wann es zuletzt benutzt wurde!

Allerdings geht er nicht in die Unterordner rein! :)

Ich hab schon überall gesucht, finde aber nix!
Muss ich das rekursiv programmieren?
Falls ja hat jemand einen Tip, Code, Tutorial, ...???

Oder reicht die Findfile-Funktion?
Dazu bräuchte ich aber auch ein bisschen Hilfe! :)

Vielen Dank schon mal!

Viele Grüße

Flo
 
bei diesem code fehlt die implementation der threads und deren datenhaltung...sollte allerdings auch erstmal egal sein (kann dir auch gern mal meinen richtigen VC++ code posten)

unten wird geschaut, ob es sich bei einem gefundenen verzeichnis-element um ein verzeichnis handelt, das man anwählen kann. dann wird der neue verzeichnisname gebastelt.
um dann zum nächsten verzeichnis zu springen habe ich allerdings mit threads gearbeitet (kannst du ja normal rekursiv machen).

Code:
        struct _finddata_t c_file;
        CString suchdir("");
        //suchanfrage fertigmachen
        suchdir.Insert(0,"*.*");
        suchdir.Insert(0,aktuellesverzeichnis);

        if( (hFile = _findfirst( LPCTSTR(suchdir), &c_file )) == -1L ){
            //kein element gefunden
        }else{
            CString neu("");
            do{
                //=>richtige verzeichnisse heraussuchen
                if (strcmp(c_file.name,".") != 0 &&
                    strcmp(c_file.name,"..") != 0 &&
                   (c_file.attrib & _A_SUBDIR)){
                    neu.Empty();
                    neu.Insert(0,"\\");
                    neu.Insert(0,c_file.name);//nächstes verzeichnis
                    neu.Insert(0,aktuellesverzeichnis);

                    aktuellesverzeichnis.Insert(0,neu);//neuer verzeichnisname

                    //DURCHLAUF EINES NEUEN VERZEICHNISSES
                    //AfxBeginThread(datenstrukur,aktuelledaten);
                }else{
                    //dateien
                }//else
            }while( _findnext( hFile, &c_file ) == 0 );
        }
 
Danke für die schnelle Antwort!

Wie immer super dass es hier so super klappt!

Allerdings hab ich noch ein Problem:

Ich hab zwar den Quellcode so einigermaßen verstanden
und kann mir vorstellen wie das abläuft, aber ich hab
borland c++, und laufen tut das nicht!

Und weil du sagtest normal rekursiv, was meinst du damit? :)

Hast du oder jemand anders da vielleicht auch was fertiges
für Borland c++?
Wäre echt spitze!

Danke schon mal und viele Grüße

Flo
 
Der Quellcode ist für Visual C++ in MFC (siehe CString)! Musst Du also portieren für Borland!

rekursiv:
Eine Funktion ist eine rekursive Funktion, wenn sie sich selbst rekursiv aufruft, d.h. der Funktionsrumpf einer Funktion f enthält einen Aufruf der Funktion f.
Abhängig von der Anzahl bzw. dem Aufbau der rekursiven Aufrufe unterscheidet man verschiedene Arten von Rekursion:
Lineare Rekursion
Kaskaden-Rekursion
Verschränkte Rekursion

Alles klar! :)
 
Du liest das Mutter-Verzeichnis ja eh schon ein. Dann testet Du jedesmal, ob es sich um eine Datei oder ein Verzeichnis handelt. Findest Du ein Verzeichnis, so rufst Du die gleiche Funktion mit dem gefundenen Verzeichnisnamen auf. Das nennt sich dann rekursiv, da ja beim neuen Aufruf das gefundene Verzeichnis das Mutter-Verzeichnis darstellt.
Für ganze Verzeichniszweige macht man das aber in der Regel nicht. Erst wenn ein Nutzer auf ein Verzeichnis klickt oder es aufklappt, wird nachgeschaut, was denn in diesem Verzeichnis drin ist.

Hoffe es war nicht allzu verwirrend.
 
Hi Leute!

Vielen Dank für die vielen Tips!
Ich habe das ganze Wochenende versucht das ganze hin zu
bekommen, aber ich krieg das nicht gebacken,
dass wenn es ein Verzeichnis ist, dass er da rein geht!!!

Ich hab den Quelltext jetzt mal angehängt!
Ist echt wichtig für mich!
Wäre super wenn da mal einer drauf sehen könnte!

Viele Grüße

Flo
 

Anhänge

  • datei_loeschen.rar
    914 Bytes · Aufrufe: 45
Zurück