findNextFile nach datum sortiert suchen und ordner ignorieren klappt nicht
-
Hallo
ich brauch hilfe bei einem kleinen problem...
und zwar will ich einen ordner durchsuchen in dem dateien sind. Dabei brauche ich die dateien sortiert nach dem Änderungsdatum und zwar beginnend mit dem ältesten.
ich habe das schon sortiert nach dem alphabet gemacht, was ohne probleme läuft(siehe unten).
jetzt weis ich nicht, wie ich die FindNextFile funktion benutzen muss, dass er mir die nächste datei mit dem ältesten datum liefert.
ich hab schon versucht ihr ftLastWriteTime zu übergeben, aber irgendwie werden sie trotzdem nach dem alphabet sortiert und dann geht er nicht mehr in die else bedungung rein
also in der if bedingung steht dann:
wfd.ftLastWriteTime.dwLowDateTime & FILE_ATTRIBUTE_DIRECTORY
anstatt dem, was ich momentan dort stehen hab.ich bin auch noch nicht ganz dahinter gekommen, was die funktion eigentlich genau macht. Ich hab mich zwar schon durch die Visual C++ hilfe gekämpft, aber daraus werde ich auch nicht ganz schlau.
Kann mir da jemand weiterhelfen?
#include<stdio.h> #include <windows.h> int main{ HANDLE fHandle; WIN32_FIND_DATA 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 )); system("pause"); return 0; }
-
ähm naja, jetzt weis ich, dass das mit dem wfd.ftLastWriteTime.dwLowDateTime & FILE_ATTRIBUTE_DIRECTORY in der if bedingung totaler schwachsinn ist *kopfkratz*
ich weis trotzdem nicht wie ich das problem anpacken könnte
-
Dieser Thread wurde von Moderator/in Nobuo T aus dem Forum ANSI C in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Du greifst auf ein nicht initialisiertes WIN32_FIND_DATA und HANDLE zu!
Ausserdem vermisse ich den FindFirstFile Aufruf. Erst danach kommen die FindNextFile Aufrufe. Und dann fehlt noch das FindClose.Simon
-
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 habekannst 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.19800102020355Damit 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.htmlstruct 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