FindFirstFile
-
Der Parameter mask von FindFirstFile(char *mask, ...); kann sogenannte wildcards (die Zeichen '*' und '?') enthalten. Dann bekommst Du mit "*.txt" nur Datei- und Unterverzeichnisnamen nach wfd.cFileName geliefert, die "test.txt" oder "xxx.txt" oder "xx.test.xx.txt" lauten.
strcmp(char *s1, char *s2) hingegen vergleicht s1 und s2 Zeichen für Zeichen. Wenn alle Zeichen und die Stringlänge gleich sind, wird 0 zurückgeliefert, ansonsten -1 oder +1.
siehe google "strcmp"
-
Hä keksekekse wie sucht man .*txt* Dateien?
-
Findet: "test.txt" und "xxx.txtxx"
#include <windows.h> #include <conio.h> #include <stdio.h> char *fbprint(char *format, ...) { static char buf[1000]; vsnprintf(buf, sizeof(buf), format, (&format)+1); return (char *)buf; } void dirsearch(char *path, char *filter) { HANDLE hFindFile; WIN32_FIND_DATA wfd; hFindFile = FindFirstFile(fbprint("%s\\%s", path, filter), &wfd); if (hFindFile != INVALID_HANDLE_VALUE) { do if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) printf("%s\\%s\n", path, wfd.cFileName); while(FindNextFile(hFindFile, &wfd) != 0); FindClose(hFindFile); } } int main() { dirsearch("c:", "*.txt*"); /* Pfad und Maske festlegen */ getch(); return 0; }
-
Geht leida nicht kommt folgende Fehlermeldung:
C:\Dokumente und Einstellungen\Dennis\Eigene Dateien\Unbenannt1.cpp In function `char* fbprint(char*, ...)':9 C:\Dokumente und Einstellungen\Dennis\Eigene Dateien\Unbenannt1.cpp cannot convert `char**' to `char*' for argument `4' to `int vsnprintf(char*, size_t, const char*, char*)'
-
Eigentlich sollte man "va_arg" verwenden, aber bei mir funktioniert es auch so.
Da wirst Du wohl oder übel casten müssen:
vsnprintf(buf, sizeof(buf), format, (char *)((&format)+1));
-
Aber da werden gar nicht die Unterverzeichnise mit dursucht
-
Und warum kann man nicht
strcat (path, "\\"); strcat (path,wfd.cFileName);
nemmen???
Weil da kommt immer eine Fehlermeldung
-
Get XxX schrieb:
Fehlermeldung
Nächste Woche fahre ich in die Stadt und kaufe mir ein Kopftuch und eine Glaskugel.
-
Fehlermeldung (Syntax Error before strcat)
-
Anbei zwei Funktionen - hier in MFC eingebettet, aber im Wesentlichen WinAPI - die erste zählt die Files - auch in Subdirectories - die zweite kopiert das gesamte Verzeichnis incl. Subdirectories.
..
-
Kekekekekese wie muss ich folgenden Code umschreiben das auch Unterverzeichnisse durchsucht werden:
#include <windows.h> #include <conio.h> #include <stdio.h> #include <string.h> void searching(WIN32_FIND_DATA wfd,char test[]); int is_good_dir(WIN32_FIND_DATA *wfd) { if (strcmp(wfd->cFileName, ".") == 0) return 0; if (strcmp(wfd->cFileName, "..") == 0) return 0; return (wfd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0; } char *fbprint(char *format, ...) { static char buf[1000]; vsnprintf(buf, sizeof(buf), format, (char *)((&format)+1)); return (char *)buf; } void dirsearch(char *path, char *filter) { HANDLE hFindFile; WIN32_FIND_DATA wfd; hFindFile = FindFirstFile(fbprint("%s\\%s", path, filter), &wfd); if ((hFindFile = FindFirstFile(filter, &wfd)) != INVALID_HANDLE_VALUE) { if (hFindFile != INVALID_HANDLE_VALUE) { do if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) { if (is_good_dir(&wfd)) dirsearch (path,filter); searching(wfd,path); } while(FindNextFile(hFindFile, &wfd) != 0); FindClose(hFindFile); } } } void searching(WIN32_FIND_DATA wfd,char test[]) { char abcd[500]; char b[500]; FILE *P; strcpy (abcd,wfd.cFileName); strcpy (b,test); strcat (b, "\\"); strcat (b,abcd); P = fopen (b,"w"); if (P) { fprintf (P,"Dies ist ein Test"); } } int main() { dirsearch("c:\\test", "*.txt*"); /* Pfad und Maske festlegen */ getch(); return 0; }
-
So müßte es funktionieren
#include <windows.h> #include <conio.h> #include <stdio.h> char *fbprint(char *format, ...) { static char buf[1000]; vsnprintf(buf, sizeof(buf), format, (char *)((&format)+1)); return (char *)buf; } void searching(WIN32_FIND_DATA wfd, char path[]) { char file[500]; /*FILE *fp;*/ strcpy(file, path); strcat(file, "\\"); strcat(file, wfd.cFileName); /* Alle gefundenen Dateien überschreiben */ /* Sehr gefährlich bei */ /* dirsearch("c:\\", "*.*", REKURSIV_JA); */ /* Windows muß dann neu installiert werden*/ /*fp = fopen (b, "wt"); if (fp) { fprintf(fp, "Dies ist ein Test"); } fclose(fp);*/ /* wichtig: Datei-Stream wieder schließen */ /* Statt dessen nur den Dateinamen ausgeben */ printf("%s\n", file); } void dirsearch(char *path, char *filter, int flagrekursiv) { HANDLE hFindFile; WIN32_FIND_DATA wfd; hFindFile = FindFirstFile(fbprint("%s\\%s", path, filter), &wfd); if (hFindFile != INVALID_HANDLE_VALUE) { do { if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) { /* FILE_ATTRIBUTE_DIRECTORY nicht gesetzt -> kein Ordner */ searching(wfd, path); } else /* FILE_ATTRIBUTE_DIRECTORY gesetzt -> ist Ordner */ { if (flagrekursiv && strcmp(wfd.cFileName, "." ) != 0 && /* no current dir */ strcmp(wfd.cFileName, "..") != 0) /* no parent dir */ { /* ================= */ /* rekursiver Aufruf */ /* ================= */ dirsearch(path, filter, flagrekursiv); } } } while(FindNextFile(hFindFile, &wfd) != 0); FindClose(hFindFile); } } #define REKURSIV_NEIN 0 #define REKURSIV_JA 1 int main() { /* Maske "*.*" oder "*" Voraussetzung für rekursives Suchen */ dirsearch("c:\\test", "*.*", REKURSIV_JA); getch(); return 0; }
-
Sry keksekekse aber es geht nicht!!!
Es werden keine Unterverzeichnisse durchsucht.
-
Da habe ich eine Kleinigkeit vergessen...
char dirfound[MAX_PATH]; ... /* ================= */ /* rekursiver Aufruf */ /* ================= */ strcpy(dirfound, path); strcat(dirfound, "\\"); strcat(dirfound, wfd.cFileName); dirsearch(dirfound, filter, flagrekursiv);
-
Und wo muss ich das Hineinfügen?
-
Get XxX schrieb:
Und wo muss ich das Hineinfügen?
Also tut mir Leid langsam habe ich kein Verständnis mehr für dich das ist ja schon nervig
Wenn du überhaupt garkeine Ahnung vom Programmieren hast dann lern es entweder oder wenn du ein fertiges Programm brauchst dann frag im Projekte Forum ob jemand so nett ist aber was du hier abziehst istUnd die letze Frage hat ja ansich nichtmal was mit Programmieren zu tun das ist für mich Dummheit (tut mir leid aber ist meine Meinung)
Wo soll es denn hin. Guck dir doch allein mal die 3 auskommentierten zeilen an. Die gibt es doch nur einmalNaja du schaffst das schon
MfG schirrmie
-
LoL ich bin erst 11 und muss nicht alles verstehen,kekekekese wenn ich die Funktion folgender Massen aufrufe wird nicht in den Unterverzeichnissen dursucht:
dirsearch("c:\\test", "*.txt*", REKURSIV_JA);
Wie muss ich die Funktion aufrufen damit alles dursucht wird?
-
keksekekse schrieb:
/* Maske "*.*" oder "*" Voraussetzung für rekursives Suchen */ dirsearch("c:\\test", "*.*", REKURSIV_JA);
-
Ja so wird nach allen Dateien gesucht
-
Und es sollen ja nur nach txt File gesucht werden