|
Beispielprogramm für binäres Schreiben:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int Feld[] = {3, 91, 2134, 6, 33, 267, 9123, -5, 22, 0};
FILE *pf;
char dateiname[] = "daten.bin"; /* Dateiname */
pf = fopen(dateiname, "wb");
if (pf == NULL)
{
printf("Fehler beim Oeffnen der Datei\n");
exit(1);
}
fwrite( (void *)Feld, sizeof(int), 10, pf);
/* Das Feld wird komplett auf einmal geschrieben */
fclose(pf);
}
Die Größe der Datei daten.bin ist also 10 * sizeof(int).
Die Funktion fread ist die zu fwrite gehörige analoge
Einlesefunktion. Ihr Rückgabewert ist die Anzahl der tatsächlich gelesenen
Bytes. Diese Zahl kann kleiner sein, als die Zahl der zu lesenden Bytes,
wenn das Dateiende vorzeitig erreicht wurde. SIe ist definiert als:
int fread(void *ptr, size_t size, size_t n, FILE *f)
Das folgende Programm kopiert eine Datei unter Verwendung der beiden Funktionen
fread() und fwrite(). Dabei wird ein char-Array als Puffer verwendet. Diese
Kopiermethode ist wesentlich schneller als zeichenweises Kopieren. Das Dateiende
wird dadurch erkannt, daß fread() den Wert 0 zurückliefert. fwrite()
schreibt genau soviele Bytes, wie von fread() gelesen wurden.
#include <stdio.h>
#include <stdlib.h>
#define MAXBUF 32768 /* Puffergroesse */
int main(void)
{
char buffer[MAXBUF]; /* Kopierpuffer */
FILE *rf, *wf; /* Lesedatei, Schreibdatei */
int numread; /* Anzahl gelesener Zeichen */
char readfrom[] = "daten.bin"; /* Dateinamen */
char writeto[] = "daten.bak";
rf = fopen(readfrom, "rb");
if (rf == NULL)
{
printf("Fehler beim Oeffnen der Datei\n");
exit(1);
}
wf = fopen(writeto, "wb");
if (wf == NULL)
{
printf("Fehler beim Oeffnen der Datei\n");
exit(1);
}
do
{
numread = fread(buffer, sizeof(char), MAXBUF, rf);
fwrite( buffer, sizeof(char), numread, wf);
} while (numread > 0);
fclose(wf);
fclose(rf);
return 0;
}
|
|
|