Problem beim Verzeichnis auslesen
-
Hey ho ,
Wenn ich das Verzeichniss so auslese :
DIR *dirHandle; // --- > liestet das verzeichniss Save auf struct dirent * dirEntry; dirHandle = opendir("Saves\\"); if (dirHandle) { while (0 != (dirEntry = readdir(dirHandle))) { puts(dirEntry->d_name); } closedir(dirHandle); }bekomm ich beim auflisten imma als erste zeile einen punkt und als zweite 2 und dann kommen erst die files das ganze sieht dann so aus :
.
..
Save
Bla
blubWisst ihr wie man die wegbekommt ?
-
Einfach abfragen, ob der Dateiname "." oder ".." ist
Ich glaube der Einzel-Punkt repräsentiert das aktuelle Verzeichnis, der Doppel-Punkt (^^) bedeutet das darüberliegende/Vater- Verzeichnis.
-
Vielleicht indem man die ersten beiden überspringt?!
-
Das ganze macht man wie ?
-
Na, du wirst ja wohl bis zwei zählen können ...

/edit: Aber wahrscheinlich ist der Stringvergleich besser, ich bin mir nicht ganz sicher, ob '.' und '..' immer existieren müssen:
while (dirEntry = readdir(dirHandle)) if (!(strcmp(dirEntry->d_name, "..") || strcmp(dirEntry->d_name, "."))) puts(dirEntry->d_name);
-
direntry->d_name scheint ja ein "std::string" oder ein "const char*" zu sein. Falls es ein std::string ist, kannst du diese Variable mit "==" oder "!=" einfach mit "." und ".." vergleichen. Z.B. if ( direntry->d_name!="." && direntry->d_name!=".." ) dann_mache_irgendwas();.
Falls direntry->d_name ein "const char*" ist, kannst du die Zeichenketten mit strcmp vergleichen, z.B. so: if ( 0!=strcmp(direntry->d_name,".") && 0!=strcmp(direntry->d_name,"..") ) dann_mache_irgendwas();
-
1 , 5 ? ne so war das nicht ,... Ahh jetzt hab ich verstanden was du mit erste beiden nicht ausgeben meinst
if(strcmp(dirEntry->d_name, ".") == 0 ||
strcmp(dirEntry->d_name, "..") == 0){
continue;Edit : To late
Thx @ ALL
-
Hab nun mal wieder ne Frage zu dem Thema ,
ALso das Verzeichniss wird in einen Vector eingelesen :
der Pointer sieht so aus :
struct dirent* entry;Jetzt möchte ich aber nur files mit bestimmten endungen einlesen :
das wollte ich so machen :
while ( 0 != (entry = readdir( handle ) ) && count < 3) { if(strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0 ) if ((entry->d_name.substr(entry->d_name.length() - 4) != ".sav") ==0 ) continue; directory_list[count++]= entry->d_name; }Nur leider klappt es nicht weil das mit dem substr und length bei sowas nicht geht , hat jemand ne Idee wie man das Richtig umsetzen kannn ?
Edit : Weiß das niemand , ich will zb nur files mit der Endung .sav in den Vector einlesen .. wie mach ich das ?
-
Du schaust ob der String 4 oder mehr Zeichen hat, und die letzten 4 davon .sav sind. Wenn ja, dann tust du den Dateinamen in den Vektor.
BTW: Im Root gibts glaube kein "..". f'`8k
AutocogitoGruß, TGGC (making great games since 1992)
-
vector< string > directory_list(3);Eigentlich müsste man es ja so machen :
if((directory_list[ 0 ].substr(directory_list[ 0 ].length() - 4) != ".sav") == 0);aber das klappt net
...
-
Toa schrieb:
vector< string > directory_list(3);Eigentlich müsste man es ja so machen :
if((directory_list[ 0 ].substr(directory_list[ 0 ].length() - 4) != ".sav") == 0);aber das klappt net
...Vielleicht wegen dem Semikolon nach der if-Abfrage?

-
Stimmt das war ein Fehler abba die Konsole schließt sich trotzdem einfach so wieder , liegt das daran das ich ihm sage er soll nur 3 files einlesen ? er abba durch den .sav test nur noch 2 zum einlesen hat und abstürtzt ?
Hier der COde :
vector< string > directory_list(3); int count=0; while ( 0 != (entry = readdir( handle ) ) && count < 3) { if(strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) if((directory_list[ 0 ].substr(directory_list[ 0 ].length() - 4) != ".sav") == 0) continue; directory_list[count++]= entry->d_name; }EDIT: Weiß niemand wie ich aus einem Ordner 3 Files einlesen die aber nur die Endung .Sav haben ? Es sollen aber auch nur 3 Einlesen werden
Edit 2 : Ich habe ja gesagt das sie sich gleich wieder schließt jetzt ist mir aufgefallen das eine Nachricht kurz im Fenster erscheint bevor die Konsole wieder zu geht :
This application has requested the Runtime to terminate it in an unusual way. Please contact the application´s support Team for more Informations.