Verzeichnisse



  • Hallo

    gibt es einen Weg, der einfach und portabel (min. Lin*x und DOS/Win32) ist,
    um in C++ oder C die Files in einem Verzeichnis bei gegebenem Pfadnamen zu erhalten; ich suche
    also (C/C++)-Äquivalente für die Python-Funktionen
    os.listdir(path) oder auch
    os.walk(top_path)

    Grüße



  • Die dirent.h gibts imho in beiden Systemen.
    Ansonsten könnte man sich eine Krücke bauen indem man per system("dir >c:\tmp\path.txt"), bzw. system("ls - lisa >/tmp/path.txt") das Verzeichnis in eine Textdatei schreiben und diese dann auslesen. Ist aber nicht gerade eine Elegante Lösung.



  • Hallo

    Du kannst auch boost:filesystem nutzen.

    chrische



  • und hier
    http://www.boost.org/libs/filesystem/doc/index.htm#tutorial
    ist sogar ein Beispiel wie das damit geht (unter Directory iterator).



  • Hallo

    Danke für Eure Vorschläge!

    Da ich für den Anfang gerne ohne größere Zusatz-Libraries auskommen
    würde, probiere ich zuerst einmal die Idee von DocJunioR aus.

    Grüße



  • Hobbyprogrammierer schrieb:

    ...
    Da ich für den Anfang gerne ohne größere Zusatz-Libraries auskommen
    würde, probiere ich zuerst einmal die Idee von DocJunioR aus.

    Grüße

    Da aber AFAIK dirent.h ebensowenig C++-Standard ist wie Boost (letzterer ist aber immerhin Kandidat), kannst Du es ebensogut mit Boost probieren 😉 .
    (wobei ich nicht sicher bin, inwieweit Boost sich doch wieder dirent.h oder anderer non-Standards bedient)

    Gruß,

    Simon2.



  • Mein Tip: Nimm Boost, der Overhead sollte nicht so groß sein, da der Linker ja nur die Benutzten Teile der Boost Lib mit in dein Programm linkt.

    Wenn du es trozdem ohne lib machen willst, kannst du einfach mithilfe des Präprozessors und #ifdef eine zur Plattform passende Funktion schreiben.

    Für Windows musst du die windows.h includieren und die passende Funktion heißt CreateDirectory("PFAD"). Unter Linux musst du halt mal ein bisschen in den Manpages stöbern.



  • Hallo

    Nochmal Danke für die Vorschläge.

    Wie gesagt, ich möchte boost für dieses kleine Problem eigentlich nicht
    benutzen, (habe boost im Augenblick auch nicht installiert) und DocJunioR's Lösung, dir bzw. ls in eine Datei umzuleiten und die Filenamen/Verzeichnisnamen aus der Datei zu holen, ist für meinen Zweck gut genug. Außerdem von schwer
    zu schlagender Portabilität, da sie auf jedem OS und mit jedem Compiler
    funktioniert.

    Dennoch weiß ich die Lösung mit boost zu würdigen 🙂

    Grüße



  • Gab es hier im Forum nicht mal einen Thread mit ein paar Gründen warum system() böse ist. Kann aber auch sein das ich mich irre und das mit etwas anderem verwechsle. Sollange es funktioniert, ist es ja gut. 🙂


Anmelden zum Antworten