Verzeichnisse einlesen



  • ich suche nach einer Möglichkeit, besser Quellcode-Beispiel um in C++ (eigentlich nicht C)

    Verzeichnisse zu lesen bzw zu erfassen.

    Ich bräuchte es für debian-Linux g++,
    am besten Betriebssystemunabhängig





  • Wenn du Code schreibst, wie du deine Posts verfasst ...

    mampfi schrieb:

    ich suche nach einer Möglichkeit [...] Verzeichnisse zu lesen bzw zu erfassen.

    In Plain C geht das nicht. Dafür musst du auf Betriebssystemfunktionen zurückgreifen. Und damit muss der Thread in die Linux-Ecke.

    C++, keine Ahnung. Auf Linux in C sind opendir und readdir dein Freund, da bekommst du auch massenhaft Codebeispiele, wenn du das googelst.

    mampfi schrieb:

    am besten Betriebssystemunabhängig

    Vielleicht hat Boost da was? Oder mit dem neuen Standard haben die sich wieder eine Möglichkeit dazu gebaut? Weiß ich nicht. Bin kein C++-ler. Aber ich bekomm Ergebnisse für boost directory bei Google, also solltest du da auch mal nachschauen.

    Was heißt dann "Betriebssystemunabhängig"? Linux, aber dann doch "betriebssystemunabhängig"? Ich habe hier eine Funktion rumfliegen, die mir durch Verzeichnisse für Linux und Windows durchgeht, sogar rekursiv. Wenn du's selbst machen willst - ist nicht sonderlich schwer zu hacken. Für Windows siehe FindFirstFile , FindNextFile und FindClose .



  • Hab mich wie in der Begrüßung wieder erst seit kurzem wieder mit C++ befasst.

    Nun ich sagte, "wenn möglich" betriebssystemunabhängig.

    Die C-Befehle für die Erfassung hatte ich früher mal in einem Programm, hätte aber gerne C++ - Befehle, wenn es die den gibt.

    Der Hintergrund ist der, ich hab so Skripts, die mir automatisch auf USB-STick sichern.

    Momentan erfasse ich ich mit system() und df (in eine Datei) den freien Speicherplatz auf dem USB-STick und löschen bei größer 80 Prozent ein älteres Verzeichnis.

    Was nun eigentlich auch schon betriebssystem-abhängig ist, da der df-Befehl (diskfree) unter Windows z.B. auch nur mit den UNIX-Tools möglich ist.



  • Techel schrieb:

    Waeum nicht gleich im C++-Forum gefragt?
    http://en.cppreference.com/w/cpp/experimental/fs/directory_iterator

    Ah, dieses Posting überlesen:
    Bei dem Quellcode kriege ich folgenden Effekt:

    g++ cpp_dir.cpp
    cpp_dir.cpp:3:35: fatal error: experimental/filesystem: Datei oder Verzeichnis nicht gefunden
    #include <experimental/filesystem>
    ^
    compilation terminated.



  • mampfi schrieb:

    Nun ich sagte, "wenn möglich" betriebssystemunabhängig.

    Quatsch. Du schriebst

    mampfi schrieb:

    am besten Betriebssystemunabhängig

    Zwischen "am besten" und "wenn möglich" besteht ein Unterschied.

    mampfi schrieb:

    Die C-Befehle für die Erfassung hatte ich früher mal in einem Programm, hätte aber gerne C++ - Befehle, wenn es die den gibt.

    Das sind keine Befehle, das sind Funktionen. Befehle wären überall verfügbar, diese Funktionen sind es nicht.

    mampfi schrieb:

    Momentan erfasse ich ich mit system()

    Alter! Warum glauben Anfänger immer, sie müssten system verwenden? Wie viele Threads gibt es jetzt zu dem Thema, dass system böse ist? Wir haben 2016, aber dieser Scheiß verfolgt uns noch immer.

    http://www.cplusplus.com/articles/j3wTURfi/

    mampfi schrieb:

    Bei dem Quellcode kriege ich folgenden Effekt:

    Und auf die Idee, den Header einfach mal zu googeln, darauf kommste nicht, was?

    http://stackoverflow.com/questions/30103209/why-cant-i-use-experimental-filesystem-with-g-4-9-2

    Du brauchst einen ausreichend aktuellen Compiler (5.3, wenn man der Information trauen darf).



  • @dachschaden: Nebenbei erwähnt solltest Du mal an Deinem Umgangston arbeiten.

    Auf der einen Seite sagts Du, Du bist kein C++ - ler auf der anderen Seite bezeichnest Du mich als Anfänger.

    Ich bin bestenfalls "c++- Wiederanfänger", da ich ziemlich sicher auf dem Stand von 1985 stagniert bin.
    ----------------------------------------------------------

    Zur Sache:

    Der Aufruf von system ist eine Übergangslösung, bis mir jemand einen Tipp, für Besseres gibt.

    Die entsprechende Routine kompiliert und führt absolut schmerzlos aus:

    Auschnitt aus einem Programm, das Platz freimacht, wenn auf dem Datenträger wenier als 80 Prozent Platz frei ist.

    Anwendung im Programm: freizahl = frei_speicher(verzeichnis);

    Komplettes Programm poste ich, sollte es jemand interessieren.

    System ist der C-Teil, der Rest ist C++.

    int frei_speicher(string para_verzeichnis)
    
    {
      string zeile;
      string belegt_string;
      int freizahl;
    
      string df_string;
    
      df_string = "df -k "+ para_verzeichnis + ">free_tar.txt";
    
      cout << "hier ist frei_speicher df_string=>" << df_string << "<" << endl; //debug
    
      system( df_string.c_str() );
    
      ifstream textDatei("free_tar.txt");
    
      getline(textDatei, zeile); //Erste Zeile überlesen
      getline(textDatei, zeile);
    
      belegt_string = zeile.substr(45,2);
    
      freizahl = 100 - to_int(belegt_string);
    
      cout << endl << endl << endl;
    
      return freizahl;
    }
    

    Eigentlich wurden höhere Programmiersprachen ja zur Portabilität erfunden.



  • Nerve hier nicht und trolle dich ins C++ Subforum.





  • Möge dann doch ein Mod das nach C++ verschieben.

    An den Fragesteller: wenn bei dir der experimental-Header nicht da ist, schau doch mal bei boost vorbei. Insbesondere hier: http://www.boost.org/doc/libs/1_61_0/libs/filesystem/doc/reference.html#space


Log in to reply