findNextFile nach datum sortiert suchen und ordner ignorieren klappt nicht



  • oh ja natürlich, wie konnte ich nur 😃

    ich hab es aus meinem code rauskopiert, der ist bischen länger und da hab das wohl unterschlagen wird natürlich sofort korigiert...ja so ist das eben bei copy and paste^^
    ich hoffe jetzt hab ich alles...

    aber vielleicht kann mir ja trotzdem jemand bei meinem problem helfen 😉

    #include<stdio.h>
    #include <windows.h>
    int main{
    
    HANDLE fHandle;
    WIN32_FIND_DATA wfd;
    
    fHandle = FindFirstFile( /*showSourceFolder*/"c:\\*", &wfd );
    
    do
    {  
       if ( wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
       {
          //ignoriere Ordner
          printf("\nOrdner: %s",wfd.cFileName);
       }
       else
       {
          //mach irgendwas mit den dateien
          printf("\nDatei: %s",wfd.cFileName);
       }
    }while(FindNextFile( fHandle, &wfd ));
    FindClose(fHandle);
    system("pause");
    return 0;
    }
    


  • ok...da fehlen noch die klammern nach main, die kann man sich ja dazudenken^^



  • Erstelle doch zuerst eine Liste mit den entsprechenden Informationen und dann sortierst Du sie gemäss deinem Wunsch.

    Simon



  • ich muss mal schauen, ob ich hinbekomme
    ich habe das bis jetzt nur mit char arrays gemacht, weil ich mit den pointern immer das problem hatte, dass ich nicht so einfach den namen abspeichern konnte, da sich der Inhalt von wfd.cFileName ja bei jedem aufruf ändert.
    So hatte ich das problem, dass in meinem string array überall der gleiche name stand
    Irgendwann habe ich es dann aufgegeben und es dann eben mit char arrays gemacht.

    Hier ist halt das problem, dass ich nicht weis, wie ich das array während der programmlaufzeit dynamisch erweitern kann bzw. ich bekomme das nicht hin
    es sollte irgendwie mit malloc gehen, aber der liefert mir nur einen pointer zum reservierten speicher. dann habe ich nämlich wieder pointer mit denen ich probleme bei der stringverarbeitung habe

    kannst du mir vielleicht einen tip geben, wie ich die am besten anstellen kann, damit ich nicht wieder das gleiche problem habe



  • blechtrommler schrieb:

    kannst du mir vielleicht einen tip geben, wie ich die am besten anstellen kann, damit ich nicht wieder das gleiche problem habe

    Hallo!
    Lern am besten den Umgang mit Zeigern.



  • Tipp schrieb:

    blechtrommler schrieb:

    kannst du mir vielleicht einen tip geben, wie ich die am besten anstellen kann, damit ich nicht wieder das gleiche problem habe

    Hallo!
    Lern am besten den Umgang mit Zeigern.

    Gute Idee 👍
    Hast du ein Anschauungsbeispiel, pls?



  • theta schrieb:

    Erstelle doch zuerst eine Liste mit den entsprechenden Informationen und dann sortierst Du sie gemäss deinem Wunsch.

    Nur um das zu vervollständigen: Du kannst die Reihenfolge, wie FindNextFile die Dateien auflistet, afaik nicht beeinflussen.



  • Genau. Das war der Grund, dass ich das geschrieben habe.
    Ich sollte den auch hinschreiben, sonst ists nicht nachvollziehbar.
    Danke und Gruss
    Simon



  • 😃 ich hab es mit der Liste hinbekommen

    war eine gute idee, dass ich mal den umgang mit zeigern lerne 🙄

    hab mich sonst immer davor gedrückt...mein problem war, dass ich immer nur den zeiger gespeichert habe und nicht den inhalt kopiert.

    ich musste einfach die funktion strcpy() benutzen...dass ich da nicht selber draufgekommen bin

    danke für die kritiken^^ hat mich sehr weiter gebracht 😉

    ach ja, für jeden, den es interessiert. Das mit der reihenfolge habe ich so gelöst:

    Erstmal:
    asctimeToMyTime ist meine eigene Funktion, die aus dem String, den asctime() liefert einen doublewert macht, damit ich diesen einfach vergleichen kann
    asctime() liefert zum Bsp.: Wed Jan 02 02:03:55 1980\n\0
    asctimeToMyTime macht daraus (0.YYYYMMDDhhmmss) : 0.19800102020355

    Damit bekomme ich das erstellungsdatum als double, was ich dann in einer liste mit zugehörem dateinamen gespeichert habe (wie ich die liste erzeugt habe kopiere ich jetzt nicht rein... versuch macht kluch 😉 )
    aber hier ein gutes beispiel zum lernen:
    http://www.wi-bw.tfh-wildau.de/~hendrix/grundstudium/c/skript/verkettete_listen.html

    struct stat file_stat; 
    struct tm *gmt;
    stat( tmpPath, &file_stat );
    gmt = gmtime(&file_stat.st_ctime);
    asctimeToMyTime(asctime(gmt));
    

    das habe ich dann natürlich in der else bedingung der schleife gemacht und somit erstmal alle dateien mit zugehörigem erstellungsdatum erhalten

    anschließend habe ich nur noch die liste nach den erstellungsdaten sortiert so wie ich es gebraucht hatte und das wars dann schon 😃



  • ach ja an stelle von tmpPath muss natürlich ein String mit pfadangabe zur datei hin


Anmelden zum Antworten