alle dateien im Ordner auflisten



  • Moin,

    weiß jemand, ob es möglich ist, in einem Array die dateinamen von allen sich im Ordner befindenden Dateien zu speichern ?

    danke :p



  • Ja, du mußt dir nur ein ausreichend großes Array anlegen (oder noch besser, nimm einen vector<string>). Um die Dateinamen zu finden, kannst du FindFirstFile/FindNextFile verwenden.



  • jep ist möglich, ich empfehle aber std::vector



  • danke erstmal für die Hilfe...

    ich kenne mich mit WinApi GARNICHT aus, aber ich habe das hier gefunden:

    #include <cstdlib>
    #include <iostream>
    #include <fstream>
    #include <windows.h>
    using namespace std;
    
    int WINAPI WinMain (HINSTANCE hThisInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR lpszArgument,
                        int nFunsterStil)
                        {
    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("D:\\Programme\\*",&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);  
    }
    

    muss ich das array jetzt mit der winapi erstellen, oder wie geht das ?
    ein beispiel wäre nicht schlecht :p

    Danke 😉



  • Erstmal würde ich mich nicht darauf verlassen, daß die Systemverzeichnisse "." und ".." immer als erstes geliefert werden.

    Und zweitens: Der Name der aktuell gefundenen Datei steht in wfd.cFileName - damit kannst du machen, was du willst. (z.B. einen vector<string> vor der Schleife anlegen und alle gefundenen Dateien per push_back() dort reinwerfen)



  • ok .. es funktioniert alles so weit.Gibt es denn auch eine funktion, um in die einzelnen ordner zu wechseln ?



  • Dort oben steht ja schon so ne if überprüfung drin mit der du gucken kannst ob das akutelle file ein ordner ist dann musst nur noch das ganze nochmal machen genau wie es dort steht blos das hier abändern:

    fHandle=FindFirstFile("D:\\Programme\\ordner\\*",&wfd);
    

    wobei ordner der filename von dem Ordner ist.
    Am besten machst das in eine Funktion und rufst die dann immer rekursiv auf.

    mfg tobZel



  • ok danke für die schnelle Hilfe.

    Ich habe jetzt vor, den gefundenen Ordnernamen in einer Variable zu speichern.Weiß jemand, wie das möglich ist?

    #include <cstdlib>
    #include <iostream>
    #include <windows.h>
    #include <vector>
    #include <fstream>
    
    using namespace std;
    
    int auslesen();
    
    HANDLE fHandle;
    WIN32_FIND_DATA wfd;
    
    int x = 0;
    
    int main()
    {
       fHandle=FindFirstFile("*",&wfd); 
    
        while (FindNextFile(fHandle,&wfd)) {
                   if(auslesen()) {
                                  cout<<"datei\n";
                                  }
                                  else {
                                       cout<<"Ordner\n";
                                        ////////////////////////////////////////
                                        //////Ordnername in Variable speichern//
                                        ////////////////////////////////////////
                                       }
              }  
        FindClose(fHandle);  
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    
    int auslesen() {
        if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
                                 return false;
                                 } else {
                                        return true;
                                        }
         }
    


  • Ganz einfach - du kannst den Inhalt von wfd.cFileName nehmen und nach belieben weiterverarbeiten.

    PS: Tu dir selber einen Gefallen und verzichte auf globale Variablen 😉



  • @CSToll: Sicher, dass . und .. nicht immer als erste geliefert werden?

    MfG SideWinder


Anmelden zum Antworten