Problem beim Verzeichnis auslesen



  • 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

    Autocogito

    Gruß, 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.
    

Anmelden zum Antworten