Dateien und Verzeichnisse in C unter DOS Windows

bauee

Grünschnabel
Hi Leute,

bin neu hier und gespannt ob hier kompetente Hilfe kommt :)

möchte von einem C-Programm aus in einem Verzeichnis alle Dateien durchforsten können!


Wie kann ich das machen?

Habe mir von meinem Prof ne Portierung der Dateie dirent.h für windwos geholt aber der bringt mir bei der Funktion opendir schon die meldung, dass er mit der Funktion nix anfangen kann?

mfg

Bauee
 
moin


Nur eine kompetente Frage kann auch ne kompetente Antowrt erwarten.

möchte von einem C-Programm aus in einem Verzeichnis alle Dateien durchforsten können!
Was meinst du damit? Willst du ne Liste der Dateien in einem Ordner so das du sie "bequem" öffnen kannst?

Was ist das Problem, Dateien "einsammeln" oder das öffnen?

Welches System?
Welcher Compiler?


mfg
umbrasaxum
 
ja gut war etwas flott vielleicht!

Willst du ne Liste der Dateien in einem Ordner so das du sie "bequem" öffnen kannst?
>> Ja

Was ist das Problem, Dateien "einsammeln" oder das öffnen?
>> von Anfang an was brauch ich für ne Headerdatei (woher bekomm ich die) welche Funktion muss ich dazu nutzen?

Welches System?
>> wie gesagt Windows

Welcher Compiler?
>> Visual Studio.NET

THX

schon mal für die schnelle Antwort!
 
moin


Windows hatte ich überlesen.
Such mal per Suchfunktion nach "ordner" oder nach "verzeichnis".
Da wirst du Beispiele und erklärungen finden.

Ein bischen eigeninitiative.


mfg
umbrasaxum
 
hab vorher schon geschaut und finde da echt nix was unter Visual Studio läuft!

Kann mir niemand Starthilfe geben?
 
Sieh dir mal in der MSDN-Hilfe die C-Funktionen findfirst() und findnext().
Damit solltest du das gewünschte machen können.
Außerdem kannst du nach den beiden Funktionen hier im Forum suchen, da müsste es auch was geben.

Gruß Daniel
 
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------------------
 
Zurück