Ordnerinhalt in String sammeln und ausgeben. Problem



  • Hey Leute.

    Ich habe mal n bisschen angefangen zu Coden und habe mich mal an was einfachem versucht. Nun Ich möchte gerne den Ordnerinalt in einen String schreiben und danach ausgeben lassen.
    Ich habe hier jenste Probleme drin, wie z.B. dass ich den String nicht in eine Funktion einbinden kann.
    Hat wer ne Idee? 😕
    Bitte habt etwas Nachsicht mit mir, da ich ein absoluter Anfänge bin.

    #include <iostream> 
    #include <cstdio> 
    #include <sys/types.h> 
    #include <dirent.h> 
    #include <string> 
    using namespace std;
    
    int main() 
    { 
        DIR           *dirHandle; 
        struct dirent *dirEntry; 
        string ordner("C:\\");
    	string ausgabe;
        //Einen Ordner öffnen 
        dirHandle = opendir(ordner); 
    
        //Konnte der Ordner geöffnet werden? 
        if ( dirHandle != NULL ) 
        { 
            //Alle Ordner/Dateien auslesen 
            while ( 0 != ( dirEntry = readdir( dirHandle ) ) ) 
            { 
                ausgabe = (ausgabe + dirEntry->d_name + "|" ); 
            } 
    
            //Den Ordner schliessen 
            closedir( dirHandle ); 
        } 
    
        std::cin.get(); 
        return (ausgabe); 
    }
    

    Gruss: Sonic



  • Ordnerinhalt auslesen ist nichts, was einfach ist. Du musst schon auf Betriebssystem-Spezifische Sachen zurueckgreifen.
    Und in Zukunft gib bei Fragen bitte exakte Fehlermeldungen mit an. So machst du es uns viel leichter dir zu helfen (ich vermute mal irgendwas a la 'std::string kannn nicht in const char* konvertiert werden').

    Zum eigentlichen Problem: Ich kenn die Funktionen nicht, eben weil sie kein Standard-C++ sind, aber wenn ich mich nicht taeusche duerfte es sich dabei um POSIX handeln. Und das wiederum braucht C-Strings (also Zeiger auf Nullterminierte Character-Ketten im Speicher), wenn mich nicht alles taeuscht.

    Um std::string in einen C-String "umzuwandeln" (genauer: einen Zeiger auf den dem String zu Grunde liegenden Inhalt zu bekommen) benutzt man die Methode c_str(); :

    //...
    std::string ordner("C:\\");
    //...
    opendir(ordner.c_str());
    

    Wobei du dir hier die Variable komplett sparen koenntest und dierekt

    opendir("C:\\");
    

    benutzen koenntest.

    Nebenbei: Ich weiss nicht, welchen Compiler du verwendest, aber es ist moeglich, dass das Programm unter Windows nicht laeuft, weil Windows kein POSIX-System ist. Es gibt zwar Loesungen, die POSIX emulieren, aber eigentlich benutzt man unter Windows das WinAPI.

    Und noch was: Mit welchem schlechten Buch lernst du, dass du alle Variablen am Anfang der Funktion definierst. In C++ tut man das gewoehnlich erst dann, wenn man die Variable braucht.



  • Wieso nimmst du nicht einfach boost::filesystem ?


Anmelden zum Antworten