msdn habe ich leider nich, muss ich mir mal besorgen!
Habe folgendes gefunden, was mir weiterhelfen sollte! Bräuchte
dazu aber die Datei DIR.H! Woher bekomme ich die?
----------BEGIN------------
Diese beiden Funktionen sind leider nicht für UNIX/LINUX kompatibel. Dafür haben sie im Kapitel zuvor die Funktionen opendir, readdir, rewinddir und closedir kennen gelernt. Das ist aber auch nicht weiter schlimm da UNIX/Linux Verzeichnisse sowieso als normale Dateien behandelt.
Hier nun die beiden Funktionen:
#inlcude <dir.h>
int findfirst(const char *pfad, struct ffblk *ffblk, int attribut);
int findnext(struct ffblk *ffblk);
Sie sehen hier haben wir wieder eine Struktur des Typs struct ffblk mit der diese beiden Funktionen zusammenarbeiten. Die sieht etwa so aus:
struct ffblk{
unsigned char ff_attrib; /*Attribut der Datei*/
unsigned short ff_ftime; /*Zeit der letzten Änderung*/
unsigned short ff_fdate; /*Datum der letz. Änderung*/
unsigned long ff_fsize; /*Größe der Datei*/
char ff_name[260]; /*Name der Datei*/
};
Wenn wir ein Verzeichnis lesen wollen müssen wir zuerst findfirst aufrufen. In pfad übergeben wir die Suchmaske. Wildcards (*) sind dabei auch erlaubt (z.B. c:\windows, \Programme\test\*.c oder *.exe....) Zusätzlich übergeben wir der Funktion findfirst einen Zeiger auf die Struktur struct ffblk mit der Informationen unserer Dateien zurückgegeben werden. Als letzten Parameter zu findfirst attribut stehen uns folgende Möglichkeiten zur Verfügung:
KONSTANTE Bedeutung - Die Suche berücksichtigt Dateien die...
FA_RDONLY ...für die das Programm nur Leserecht hat
FA_HIDDEN ...versteckt sind
FA_SYSTEM ...die Systemdateien sind
FA_LABEL ...Bezeichnung eines Datenträgers sind
FA_DIREC ...Verzeichnisse sind
FA_ARCH ...bei denen das Archivbit gesetzt ist
Der Rückgabewert von findfirst ist bei Erfolg 0 ansonsten ungleich 0. Falls alles glatt gelaufen ist können wir die Funktion findnext einsetzten die wie der Name schon sagt den nächsten Verzeichniseintrag ließt. Hierbei wird in ffblk der nächste Verzeichniseintrag zurückgegeben. Auch die Funktion findnext liefert bei Erfolg 0 zurück ansonsten einen Wert ungleich 0. Schauen wir uns das mal in der Praxis an....
/*ffblk.c*/
#include <stdio.h>
#include <stdlib.h>
#include <dir.h>
#include <dos.h> //FA_RDONLY,FA_HIDDEN
#define ALL FA_RDONLY|FA_HIDDEN|FA_SYSTEM|FA_LABEL|FA_DIREC|FA_ARCH
int main(int argc, char **argv) {
int ret;
struct ffblk info;
if(argc != 2) {
fprintf(stderr,"Benutzung : %s suchpfad\n",argv[0]);
exit (1);
}
ret=findfirst(argv[1],&info,ALL);
while(ret == 0) {
printf("%20s : %6ld Bytes\n",info.ff_name,info.ff_fsize);
ret=findnext(&info);
}
return 0;
}
Geben sie jetzt z.B. in der Kommandozeile folgendes ein:
find *.c
Somit sucht unser Programm alle C-Programme mit der Endung *.c heraus und gibt diese mit der Größe in Bytes auf dem Bildschirm aus. Natürlich nur in dem Verzeichnis das sie als 2.Argument übergeben.
---------------END------------------