Datei Pfade
-
Hallo
Ich lerne seit zwei Wochen C++. Meine Idee ist das ich mir die Pfade von Dateien in einem Ordner ausgeben lasse.
Nun habe ich mir aus Code Stücken, welche ich im Internet gefunden habe etwas zusammen gebastelt. Das funktioniert auch soweit nur bekomme ich nur die Namen der Dateien ausgegeben und auch nur die,die im Hauptordner sind. Die Dateien in den Unterordner werden eicht beachtet. Ich habe schon hier im Forum gesucht aber nichts passendes gefunden. Ich hoffe ihr könnt mir helfen.#include <sys/types.h> #include <dirent.h> #include <errno.h> #include <vector> #include <string> #include <iostream> using namespace std; int getdir (string file, vector<string> &files) { DIR *dp; struct dirent *dirp; if((dp = opendir(file.c_str())) == NULL) { cout << "Error(" << errno << ") opening " << file << endl; return errno; } while ((dirp = readdir(dp)) != NULL) { files.push_back(string(dirp->d_name)); } closedir(dp); return 0; } int main() { string file = string("."); vector<string> files = vector<string>(); getdir(file,files); for (unsigned int i = 0;i < files.size();i++) { cout << files[i] << endl; } system("PAUSE"); return 0; }MFG
-
Schau dir mal Boost.Filesystem an.
Besonders directory_iterator ist für dich interessant.Edit: Und dieses Tutorial: http://www.boost.org/doc/libs/1_55_0b1/libs/filesystem/doc/tutorial.html#Directory-iteration
Edit2: Um das allerdings bis in alle Ebenen fortzuführen, brauchst du so etwas in der Art:
stack directories; directory.push(start); while (!directories.empty()) { cur = directories.top(); directories.pop(); while (curdateien_verfuegbar) { hole_naechste_datei(); if (!cur.ist_directory) print_name(); else directories.push(dieses_verzeichnis); } }
-
Das ist so direkt gesehen erst einmal eine Frage zu POSIX-Systemprogrammierung. Wenn du das weiter verfolgen möchtest, dann kann ich den Thread in das entsprechende Unterforum verschieben.
Es gibt aber für C++ die populäre und weit verbreitete Bibliothekssammlung "Boost". Die hat auch einen Teil, mit dem Dateisystemaufgaben plattformunabhängig und mittels modernem C++ gelöst werden können. Modernes, idiomatisches C++ ist für Anfänger vielleicht nicht das allerverständlichste, aber es ist vermutlich besser, als sich mit der POSIX C-Schnittstelle herum zu schlagen. Ich empfehle, das mal anzugzusehen:
http://www.boost.org/doc/libs/1_55_0b1/libs/filesystem/doc/index.htmedit: Da war Nathan schneller als ich.
-
Spinn ich jetzt? Da war doch noch ein Beitrag?!
-
Nathan schrieb:
Spinn ich jetzt? Da war doch noch ein Beitrag?!
Einen mit Unfug drin? Da waren sogar zwei, aber das konnte ich beheben.
-
Ist es normal das die Installation von boost nach 2 Stunden immer noch nicht fertig ist? Ich habe es wie in dem Video gemacht.
https://www.youtube.com/watch?v=6trC5zVXzG0 Das was in dem Video bei 5.40 anfängt läuft bei mir schon seit 2 Stunden.
-
Also bei mir hat das letzten Frühling (als ich das das letzte Mal gemacht hab) auch mehrere Stunden gedauert...
-
xxMAXxx schrieb:
Ich lerne seit zwei Wochen C++. [...] Nun habe ich mir aus Code Stücken, welche ich im Internet gefunden habe etwas zusammen gebastelt.
Ganz schlechte Idee! Tu Dir einen Gefallen, und lerne C++ richtig. Mit Code Schnippsel aus dem Netz zusammenbasteln lernt man kein C++. Echt jetzt. Ohne Scheiß. Ist kein Vorwurf, nur ein Tipp. Musste mal (wieder) gesagt werden.

xxMAXxx schrieb:
Das funktioniert auch soweit nur bekomme ich nur die Namen der Dateien ausgegeben und auch nur die,die im Hauptordner sind. Die Dateien in den Unterordner werden eicht beachtet.
Das ist normal so. Wenn Du wissen willst, was in den Unterordnern so drin ist, brauchst Du irgendwo 'nen rekursiven Aufrufe. Geht sicher auch ohne, aber Rekursion liegt nahe.