Alle Dateien aus Ordner öffnen
-
Hallo,
ist es möglich, mit fopen oder einem anderen Befehl alle Dateien aus einem Ordner nacheinander zu öffnen? Also man gibt keinen bestimmten Namen vor, sondern eher etwas wie fopen(.)...
Danke schonmal im vorraus
Gruß Mathias
-
Wohl nicht mit ANSI C. Da musst du wohl oder übel auf Systemspezifische Funktionen zurückgreifen oder eine entsprechende lib bemühen.
-
Du kannst mit
struct dirent *file; DIR *dir; while((file = readdir(dir))) file->d_name ....
den ganzen Ordner durchgehen, aber ich weiß nicht, ob das systemübergreifend ist oder nur für Unix.
-
Das drient.h Ding ist nicht C-Standard, für Windows ist aber eine freie Version ( Headerdatei dirent.h und Bibliothek dirent.lib ) verfügbar.
Z.B. hier, ganz unten ist ein Link zum Download:
http://en.wikipedia.org/wiki/Dirent.h
-
ok, super. dann probiere ich es mal damit. Hätte aber gedacht, dass es etwas einfacher geht
-
Das ist nicht so schwer: Dateien runterladen, entpacken. Die Pfade zur dirent.h und zur dirent.lib deinem Compiler bzw. deiner IDE bekannt machen.
Die Includeanweisung in der C-Datei schreiben, in der du die Funktionen brauchst: #include "dirent.h".
Loslegen.
Verhältnismäßig wenig Aufwand, im Vergleich zur selbstprogrammierten Alternative wie z.B. mit der WinApi.
-
motivat0r schrieb:
Verhältnismäßig wenig Aufwand, im Vergleich zur selbstprogrammierten Alternative wie z.B. mit der WinApi.
ich glaub ich krieg gleich ne roflose, mit WinAPI is doch nicht viel aufwand
hier is das windows äquivalent
HANDLE fHandle; WIN32_FIND_DATA wfd; fHandle=FindFirstFile("C:\\*",&wfd); do { // Eintrag nur behandeln, wenn es nicht . oder .. ist (werden nur bei Unterverzeichnissen mit zurückgeliefert) // hier könnte man z.B. auch mit lstrcmp auf . und .. vergleichen, was allerdings nicht ganz so effizient ist if (!( (wfd.cFileName[0]=='.') && ( (wfd.cFileName[1]=='.' && wfd.cFileName[2]==0) || wfd.cFileName[1]==0 ) )) { if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { MessageBox(0,wfd.cFileName,"Folgendes Verzeichnis wurde gefunden:",0); // Datei ist keine, sondern ein Verzeichnis... // Hier könnte man dasselbe nochmal machen, um auch die // Unterverzeichnisse zu scannen ;-) } else { MessageBox(0,wfd.cFileName,"Folgende Datei gefunden:",0); } } } while (FindNextFile(fHandle,&wfd)); FindClose(fHandle);
dafür musst du lediglich noch
#include <windows.h>
oben einfügen und fertig!!
-
ah ok, super :). ich versuchs dann mal damit, aber hab leider grade nicht so viel zeit - gerade im stress wegen studiumsbeginn
-
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <dirent.h> int main(int argc, char *argv[]) { FILE *fp1; char string1[5000],zeichen; char such[100]={"test"}; char* Ergebnis; char str[256]; DIR *dp; struct dirent *ep; dp=opendir(argv[1]); if (dp==NULL) exit(8); while(1) { ep=readdir(dp); if (NULL==ep) break; if (strcmp(".",ep->d_name)==0) continue; if (strcmp("..",ep->d_name)==0) continue; sprintf(str, "e:\\test\\%s",ep->d_name); fp1=fopen(str,"r"); fscanf(fp1,"%s",&string1); while(fgets(string1,16,fp1)!=0) { printf("%s",string1); Ergebnis=(strstr(string1,such)); if(Ergebnis!=NULL) printf("%s\n",ep->d_name); } } closedir(dp); }
Erstmal sorry für die komische Darstellung, aber irgendwie funktioniert das mit dem [cpp] bei mir nich, oder ich bin zu blöd dazu
Also ich habs jetzt hinbekommen mit dirent.h
Jetzt kommt gleich das nächste Problem: Ich hätte gerne, dass das Programm alle Dateien aus einem Ordner nach "such" durchsucht. Also in dem Fall "test". Das Programm findet aber nichts. Weiss jemand woran das liegen könnte?
Gruß Mathias
-
wird das wort per printf angezeigt?
1 möglichkeit: das wort ist nicht in der datei drin
2 möglichkeit: das wort wird aufgetrennt, weil die zeile nicht komplett in den puffer passt ( du gibst lediglich 16 zeichen als zeilenllänge an, mach doch statt fgets(string1,16,fp1) -> fgets(string1,sizeof(string1),fp1) )
-
ah jetzt läufts :D. Die Zeile hat nicht in den Puffer gepasst.
vielen Dank!