Wie kann ich den einen Ordner auslesen?
So das man die Dateinamen bekomme, die sich in dem Ordenr befinden.
Gruss localhost
Wie kann ich den einen Ordner auslesen?
So das man die Dateinamen bekomme, die sich in dem Ordenr befinden.
Gruss localhost
Womit?Zitat von localhost
Ich meine mit welcher Sprache möchtest du das machen?
c++ wer nicht sclecht wenn das ging.
das geht z.B. so:
Code:#include <iostream.h> #include <dirent.h> #include <unistd.h> int main(int argc, char *argv[]) { char *dirname = "."; DIR *dir; struct dirent *entry; if(argc == 2) { dirname = argv[1]; } if(dir=opendir(dirname)) { while(entry = readdir(dir)) { cout << entry->d_name << endl; } closedir(dir); } return(0); }
schau Dir dazu auch
man readdir
man opendir
man closedir
an. In diesem Beispiel wird entweder das aktuelle Verzeichnis oder, falls übergeben, argv[1] ausgelesen...
nichtCode:<iostream>
Letzteres ist ein veralteter Header und wird von aktuellen Compilern oft nicht mehr mitgeliefert. Der andere ist der Standard C++ Header.Code:<iostream.h>
Ciao,
_
Qt/KDE Entwickler
Debian Benutzer
Dann allerdings dasnicht vergessen, oder immer std::cout, std::endl schreiben.Code:using namespace std;
Zitat von Joghurt
was hatt das eindlich mit dem std:: auf sich
ich mach das eindlich nur wen ich dan denke bei string also std::string alshdlashl
Namespace. Früher war cout ja dann vergeben, und du konntest keine Methode/Variable problemlos cout nennen, jetzt hat jede Bibliothek ihren eigenen Namespace, man braucht die Klassen also z.B. nicht "LibFoobarHTMLParser" nennen, sondern kann einfach "HTMLParser" im Namensraum "FooBar" definieren, ohne sich Sorgen machen zu müssen, dass dieser Name bereits vergeben ist. Und die Standardlibraries haben halt den Namespace "std" zugewiesen bekommen.
Sieh dir mal die Boost-Libraries an, da wird der Sinn schnell klar
http://www.boost.org <- sollte man als C++-Programmierer sowieso kennen, damit macht das Programmieren und C++ wieder Spaß.
wenn ich das so machen will geht nicht also den . und .. nict anzeigen lassen will.Code:#include <iostream> #include <dirent.h> #include <unistd.h> using namespace std; int main(int argc, char *argv[]) { char *dirname = "."; DIR *dir; struct dirent *entry; if(argc == 2) { dirname = argv[1]; } if(dir=opendir(dirname)) { while(entry = readdir(dir)) { if(entry->d_name != "." or entry->d_name != "..") cout << entry->d_name << endl; } closedir(dir); } return(0); }
und wenn ich nur entry holle kommt eine hexa zahl bei raus.
Und find geht auch nicht also
entry.find()
entry->d_name.find()
geht auch nicht
Damit vergleichst du, ob entry->d_name auf die selbe Speicheradresse wie "." zeigt, was du willst, geht mit strcmpZitat von localhost
beachte die Negation, da strcmp 0 zurückgibt, wenn die Strings identisch sind.Code:if (!strcmp(entry->d_name,".") or !strcmp(entry->d_name,".."))
Alternativ kannst du den char* natürlich auch in einen String umwandelnCode:string name = entry->d_name; if (name != "." or name != "..") { cout << name << endl;}
Das geht so auch nicht ganz, denn wenn in entry->d_name ein "." steht, ist der erste Ausdruck aufgrund des ! true und damit wird . ausgegeben. Gleiches gilt für ".." - da wird der zweite ausdruck true und damit auch der GEsamtausdruck... .ist ja eine ODER Verknüpfung. Also wird hier NUR "." und ".." ausgeben.Code:if(!strcmp(entry->d_name,".") or !strcmp(entry->d_name,".."))
Der Inhalt von d_name soll nicht "." UND nicht ".." sein
Es gibt verschiedene Möglichkeiten das zu erreichen...
oder auchCode:while(entry = readdir(dir)) { if( strcmp(entry->d_name,".") && strcmp(entry->d_name,"..") ) cout << entry->d_name << endl; }
Ist ein bißchen verquer , wegen der Logik mit strcmp()... ich fall auch immer wieder drauf reinCode:while(entry = readdir(dir)) { if( !strcmp(entry->d_name,".") || strcmp(entry->d_name,"..") ) continue; cout << entry->d_name << endl; }
Hast recht, war nicht ganz bei der Sache. C++ hat aber auch das Schlüsselwort "and", also "or" einfach durch and ersetzen.
Dann aber auch die Negierung von strcmp() raus... sonst wird garnix ausgegeben...Ein String kann nicht gleichzeitig "." und ".." seinalso "or" einfach durch and ersetzen.
Ich geb's auf! Heute ist einfach nicht mein Tag
Ich hab mir angewöhnt bei Funktionen die keinen echten boolschen Wert liefern, immer mit dem gewünschten Zielwert zu vergleichen.Zitat von michael.sprick
Also im Falle von strcmp
obwohl man im diskutiertem Falle wahrscheinlich strncmp benutzen würdeCode:if (strcmp(a, b) == 0)
Ciao,
_
Qt/KDE Entwickler
Debian Benutzer
Lesezeichen