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
-
Waeum nicht gleich im C++-Forum gefragt?
http://en.cppreference.com/w/cpp/experimental/fs/directory_iterator
-
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
undreaddir
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
undFindClose
.
-
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_iteratorAh, 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, dasssystem
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.
-
http://www.sueddeutsche.de/karriere/gutes-benehmen-nicht-dressiert-sondern-zivilisiert-1.516904
also dann
-
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