Verzeichnisse rekursiv öffnen?
-
Hallo,
Ich frage mich wie ich Ein Verzeichnis rekursiv auslesen kann.
Ich dachte a etwas wie:
int main(int argc, char *argv []) { DIR *maindir; struct dirent *entry; struct stat status ; string path, temp; path="/home/guert/" ; maindir = opendir(path.c_str()); do { entry = readdir(maindir); if(entry) { cout << entry ->d_name <<endl; temp = path+entry->d_name; cout << temp << endl; stat(temp.c_str(), &status); if (status.st_mode & S_IFMT != S_IFDIR) { //öffne dieses Verzeichnis und lies es aus } } }while (entry); }
Allerdings müsste ich damit für jede Ebene eine neue Verschachtelung schreiben. Sinnvollere Ansätze?
-
Du hast es doch schon gesagt: mit einer Funktion, die alle Dateien in eine übergebene Liste schreibt und sich selbst für jedes Unterverzeichnis aufruft.
-
g schrieb:
Ich frage mich wie ich Ein Verzeichnis rekursiv auslesen kann.
Mit einer rekursiven Funktion vielleicht?
-
Ja, das ist mir schon bewusst.
Wenn ich aber eine Anweisung schreibe:
Öffne Ordner
Schaue nach ob dieser Ordner enthält
Wenn Ja, öffne diese, wenn nein, beende
Mache mit den gefunden Unterordner das selbe.Muss ich für jede Öffungsebene eine neue while Schleife schreiben
-
Ich weiß auch nicht wies geht, aber der Quelltext von grep oder find oder du
sollte das zeigen, die können ja alle rekursiv durch Verzeichnisse.
Warum das Rad neu erfinden - das Ergebnis wird sein -rund funktionierts am besten.
-
guert schrieb:
Ja, das ist mir schon bewusst.
Was ist dir bewusst?
guert schrieb:
Muss ich für jede Öffungsebene eine neue while Schleife schreiben
Nein.
Nicht, wenn du eine rekursive Funktion hast, dann hast du nämlich genau eine while-Schleife.
-
Eine Woche später bin ich noch immer nicht weiter. Ich trage die zu öffnenden Verzeichnisse nun in einen Vector ein, aus irgendeinem Grund wird die for-Schleife zum Schluss aber nicht abgearbeitet:
#include <iostream> #include <dirent.h> #include <string> #include <sys/types.h> #include <sys/stat.h> #include <vector> #include <unistd.h> using namespace std; bool foobar(string path) { DIR *maindir ; struct dirent *entry; string temp; struct stat status; vector <string> myvec; int i,x=0; maindir = opendir(path.c_str()); do { entry = readdir(maindir); if (entry) { temp=path+entry->d_name; stat(temp.c_str(), &status); if (S_ISDIR(status.st_mode)) { cout<<"Verzeichnis: " << entry->d_name<<endl; myvec.push_back(temp); } } }while (entry); closedir(maindir); for (x=0;x<1,x++;) { myvec[0]=myvec[0]+"/"; cout <<endl <<endl<<myvec[0]<<endl<<endl; foobar(myvec[0]); x++; } } int main(int argc, char *argv []) { foobar(argv[1]); }
-
Ehrlich, Du solltest Dir mal ein gutes Buch zum Thema C-Grundlagen bzw. C++-Grundlagen zu Gemüte führen.
for (x=0;x<1,x++;)
Was soll denn das sein?
-
http://www.google.com/search?hl=en&q=Verzeichnis+rekursiv+durchsuchen+cpp&btnG=Search&aq=f&aqi=&oq=
Erstes Suchergebnis:
http://www.ecodes.de/cbuilder/ansicht.php?ind=49Ist zwar C++Builder, aber das zeigt dir das Prinzip wie es geht.
Den Code verstehen und umsetzen ist dann der nächste Punkt.