C Dateiverwaltung
Handhabung von C-Dateien
In diesem Tutorial lernen Sie die Handhabung von Dateien in C kennen. Sie werden lernen, Standard-I/O in C mit fprintf(), fscanf(), fread(), fwrite(), fseek() usw. mit Hilfe von zu handhaben Beispiele.
Eine Datei ist ein Container in Computerspeichergeräten, der zum Speichern von Daten verwendet wird.
Warum Dateien benötigt werden?
- Wenn ein Programm beendet wird, gehen die gesamten Daten verloren. Durch das Speichern in einer Datei bleiben Ihre Daten erhalten, auch wenn das Programm beendet wird.
- Wenn Sie eine große Anzahl von Daten eingeben müssen, wird es viel Zeit in Anspruch nehmen, sie alle einzugeben.
Wenn Sie jedoch eine Datei haben, die alle Daten enthält, können Sie mit ein paar Befehlen in C leicht auf den Inhalt der Datei zugreifen. - Sie können Ihre Daten einfach und ohne Änderungen von einem Computer auf einen anderen verschieben.
Dateitypen
Beim Umgang mit Dateien gibt es zwei Arten von Dateien, die Sie kennen sollten:
- Textdateien
- Binärdateien
1. Textdateien
Textdateien sind die normale .txt Dateien. Sie können Textdateien ganz einfach mit einem einfachen Texteditor wie Notepad erstellen.
Wenn Sie diese Dateien öffnen, sehen Sie den gesamten Inhalt der Datei als einfachen Text. Sie können den Inhalt einfach bearbeiten oder löschen.
Sie erfordern minimalen Pflegeaufwand, sind leicht lesbar und bieten die geringste Sicherheit und nehmen mehr Speicherplatz in Anspruch.
2. Binärdateien
Binärdateien sind meistens die .bin Dateien auf Ihrem Computer.
Anstatt Daten im Klartext zu speichern, speichern sie sie in binärer Form (0 und 1).
Sie können eine größere Datenmenge speichern, sind nicht leicht lesbar und bieten mehr Sicherheit als Textdateien.
Dateioperationen
In C können Sie vier Hauptoperationen an Dateien ausführen, entweder Text- oder Binärdateien:
- Erstellen einer neuen Datei
- Öffnen einer bestehenden Datei
- Schließen einer Datei
- Lesen und Schreiben von Informationen in eine Datei
Mit Dateien arbeiten
Wenn Sie mit Dateien arbeiten, müssen Sie einen Zeiger vom Typ file deklarieren. Diese Deklaration wird für die Kommunikation zwischen der Datei und dem Programm benötigt.
FILE *fptr;
Öffnen einer Datei - zum Erstellen und Bearbeiten
Das Öffnen einer Datei erfolgt mit dem fopen()
Funktion definiert in stdio.h
Header-Datei.
Die Syntax zum Öffnen einer Datei in der Standard-E/A lautet:
ptr = fopen("fileopen","mode");
Zum Beispiel
fopen("E:\\cprogram\\newprogram.txt","w");
fopen("E:\\cprogram\\oldprogram.bin","rb");
- Nehmen wir an, die Datei
newprogram.txt
existiert nicht am OrtE:\cprogram
. Die erste Funktion erstellt eine neue Datei namensnewprogram.txt
und öffnet es zum Schreiben nach dem Modus 'w' .
Im Schreibmodus können Sie den Inhalt der Datei erstellen und bearbeiten (überschreiben). - Nehmen wir nun die zweite Binärdatei
oldprogram.bin
an existiert am OrtE:\cprogram
. Die zweite Funktion öffnet die vorhandene Datei zum Lesen im Binärmodus 'rb' .
Im Lesemodus können Sie die Datei nur lesen, Sie können nicht in die Datei schreiben.
Modus | Bedeutung von Modus | Während Datei nicht existiert |
---|---|---|
r | Zum Lesen geöffnet. | Wenn die Datei nicht existiert, fopen() gibt NULL zurück. |
rb | Zum Lesen im Binärmodus öffnen. | Wenn die Datei nicht existiert, fopen() gibt NULL zurück. |
w | Offen zum Schreiben. | Wenn die Datei existiert, wird ihr Inhalt überschrieben. Wenn die Datei nicht existiert, wird sie erstellt. |
wb | Zum Schreiben im Binärmodus öffnen. | Wenn die Datei existiert, wird ihr Inhalt überschrieben. Wenn die Datei nicht existiert, wird sie erstellt. |
a | Zum Anhängen öffnen. Daten werden am Ende der Datei hinzugefügt. | Wenn die Datei nicht existiert, wird sie erstellt. |
ab | Öffnen zum Anhängen im Binärmodus. Daten werden am Ende der Datei hinzugefügt. | Wenn die Datei nicht existiert, wird sie erstellt. |
r+ | Offen zum Lesen und Schreiben. | Wenn die Datei nicht existiert, fopen() gibt NULL zurück. |
rb+ | Im Binärmodus sowohl zum Lesen als auch zum Schreiben öffnen. | Wenn die Datei nicht existiert, fopen() gibt NULL zurück. |
w+ | Offen zum Lesen und Schreiben. | Wenn die Datei existiert, wird ihr Inhalt überschrieben. Wenn die Datei nicht existiert, wird sie erstellt. |
wb+ | Im Binärmodus sowohl zum Lesen als auch zum Schreiben öffnen. | Wenn die Datei existiert, wird ihr Inhalt überschrieben. Wenn die Datei nicht existiert, wird sie erstellt. |
a+ | Zum Lesen und Anhängen öffnen. | Wenn die Datei nicht existiert, wird sie erstellt. |
ab+ | Im Binärmodus sowohl zum Lesen als auch zum Anhängen öffnen. | Wenn die Datei nicht existiert, wird sie erstellt. |
Schließen einer Datei
Die Datei (sowohl Text als auch Binärdatei) sollte nach dem Lesen/Schreiben geschlossen werden.
Das Schließen einer Datei erfolgt mit fclose()
Funktion.
fclose(fptr);
Hier, fptr
ist ein Dateizeiger, der der zu schließenden Datei zugeordnet ist.
Lesen und Schreiben in eine Textdatei
Zum Lesen und Schreiben in eine Textdatei verwenden wir die Funktionen fprintf()
und fscanf().
Sie sind nur die Dateiversionen von printf()
und scanf()
. Der einzige Unterschied ist, dass fprintf()
und fscanf()
erwartet einen Zeiger auf die Struktur FILE.
Beispiel 1:In eine Textdatei schreiben
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num;
FILE *fptr;
// use appropriate location if you are using MacOS or Linux
fptr = fopen("C:\\program.txt","w");
if(fptr == NULL)
{
printf("Error!");
exit(1);
}
printf("Enter num: ");
scanf("%d",&num);
fprintf(fptr,"%d",num);
fclose(fptr);
return 0;
}
Dieses Programm nimmt eine Nummer vom Benutzer und speichert sie in der Datei program.txt
.
Nachdem Sie dieses Programm kompiliert und ausgeführt haben, sehen Sie eine Textdatei program.txt
im C-Laufwerk Ihres Computers erstellt. Wenn Sie die Datei öffnen, sehen Sie die eingegebene Ganzzahl.
Beispiel 2:Lesen aus einer Textdatei
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num;
FILE *fptr;
if ((fptr = fopen("C:\\program.txt","r")) == NULL){
printf("Error! opening file");
// Program exits if the file pointer returns NULL.
exit(1);
}
fscanf(fptr,"%d", &num);
printf("Value of n=%d", num);
fclose(fptr);
return 0;
}
Dieses Programm liest die Ganzzahl, die in program.txt
vorhanden ist Datei und druckt sie auf dem Bildschirm.
Wenn Sie die Datei aus Beispiel 1 erfolgreich erstellt haben , erhalten Sie beim Ausführen dieses Programms die eingegebene Ganzzahl.
Andere Funktionen wie fgetchar()
, fputc()
usw. können auf ähnliche Weise verwendet werden.
Lesen und Schreiben in eine Binärdatei
Funktionen fread()
und fwrite()
werden zum Lesen und Schreiben in eine Datei auf der Festplatte bzw. im Fall von Binärdateien verwendet.
In eine Binärdatei schreiben
Um in eine Binärdatei zu schreiben, müssen Sie den fwrite()
verwenden Funktion. Die Funktionen nehmen vier Argumente entgegen:
- Adresse der Daten, die auf die Festplatte geschrieben werden sollen
- Größe der Daten, die auf die Festplatte geschrieben werden sollen
- Anzahl dieser Art von Daten
- Zeiger auf die Datei, in die Sie schreiben möchten.
fwrite(addressData, sizeData, numbersData, pointerToFile);
Beispiel 3:Mit fwrite() in eine Binärdatei schreiben
#include <stdio.h>
#include <stdlib.h>
struct threeNum
{
int n1, n2, n3;
};
int main()
{
int n;
struct threeNum num;
FILE *fptr;
if ((fptr = fopen("C:\\program.bin","wb")) == NULL){
printf("Error! opening file");
// Program exits if the file pointer returns NULL.
exit(1);
}
for(n = 1; n < 5; ++n)
{
num.n1 = n;
num.n2 = 5*n;
num.n3 = 5*n + 1;
fwrite(&num, sizeof(struct threeNum), 1, fptr);
}
fclose(fptr);
return 0;
}
In diesem Programm erstellen wir eine neue Datei program.bin
im C-Laufwerk.
Wir deklarieren eine Struktur threeNum
mit drei Nummern - n1, n2 und n3 , und definieren Sie es in der main-Funktion als num.
Jetzt speichern wir innerhalb der for-Schleife den Wert mit fwrite()
in der Datei .
Der erste Parameter übernimmt die Adresse von num und der zweite Parameter nimmt die Größe der Struktur threeNum
an .
Da wir nur eine Instanz von num einfügen , der dritte Parameter ist 1
. Und der letzte Parameter *fptr
zeigt auf die Datei, in der wir die Daten speichern.
Abschließend schließen wir die Datei.
Lesen aus einer Binärdatei
Funktion fread()
Nehmen Sie auch 4 Argumente ähnlich dem fwrite()
Funktion wie oben.
fread(addressData, sizeData, numbersData, pointerToFile);
Beispiel 4:Lesen aus einer Binärdatei mit fread()
#include <stdio.h>
#include <stdlib.h>
struct threeNum
{
int n1, n2, n3;
};
int main()
{
int n;
struct threeNum num;
FILE *fptr;
if ((fptr = fopen("C:\\program.bin","rb")) == NULL){
printf("Error! opening file");
// Program exits if the file pointer returns NULL.
exit(1);
}
for(n = 1; n < 5; ++n)
{
fread(&num, sizeof(struct threeNum), 1, fptr);
printf("n1: %d\tn2: %d\tn3: %d\n", num.n1, num.n2, num.n3);
}
fclose(fptr);
return 0;
}
In diesem Programm lesen Sie dieselbe Datei program.bin
und die Datensätze nacheinander durchlaufen.
Einfach ausgedrückt lesen Sie einen threeNum
Aufzeichnung von threeNum
Größe aus der Datei, auf die *fptr zeigt in die Struktur num .
Sie erhalten dieselben Datensätze, die Sie in Beispiel 3 eingefügt haben .
Daten mit fseek() abrufen
Wenn Sie viele Datensätze in einer Datei haben und auf einen Datensatz an einer bestimmten Position zugreifen müssen, müssen Sie alle Datensätze davor durchlaufen, um den Datensatz zu erhalten.
Dadurch wird viel Speicher und Betriebszeit verschwendet. Mit fseek()
gelangen Sie einfacher an die benötigten Daten .
Wie der Name schon sagt, fseek()
sucht den Cursor nach dem angegebenen Datensatz in der Datei.
Syntax von fseek()
fseek(FILE * stream, long int offset, int whence);
Der erste Parameterstrom ist der Zeiger auf die Datei. Der zweite Parameter ist die Position des zu suchenden Datensatzes und der dritte Parameter gibt die Stelle an, an der der Offset beginnt.
Woher | Bedeutung |
---|---|
SEEK_SET | Beginnt mit dem Offset am Anfang der Datei. |
SEEK_END | Beginnt mit dem Offset am Ende der Datei. |
SEEK_CUR | Beginnt den Offset von der aktuellen Position des Cursors in der Datei. |
Beispiel 5:fseek()
#include <stdio.h>
#include <stdlib.h>
struct threeNum
{
int n1, n2, n3;
};
int main()
{
int n;
struct threeNum num;
FILE *fptr;
if ((fptr = fopen("C:\\program.bin","rb")) == NULL){
printf("Error! opening file");
// Program exits if the file pointer returns NULL.
exit(1);
}
// Moves the cursor to the end of the file
fseek(fptr, -sizeof(struct threeNum), SEEK_END);
for(n = 1; n < 5; ++n)
{
fread(&num, sizeof(struct threeNum), 1, fptr);
printf("n1: %d\tn2: %d\tn3: %d\n", num.n1, num.n2, num.n3);
fseek(fptr, -2*sizeof(struct threeNum), SEEK_CUR);
}
fclose(fptr);
return 0;
}
Dieses Programm beginnt mit dem Lesen der Datensätze aus der Datei program.bin
in umgekehrter Reihenfolge (vom letzten zum ersten) und druckt es aus.
C Sprache