logo

Grundlagen der Dateiverwaltung in C

Die Dateiübergabe in C ist der Prozess, bei dem wir Vorgänge für eine Datei erstellen, öffnen, lesen, schreiben und schließen. Die C-Sprache bietet verschiedene Funktionen wie fopen(), fwrite(), fread(), fseek(), fprintf() usw., um Eingaben, Ausgaben und viele verschiedene C-Dateioperationen in unserem Programm durchzuführen.

Warum brauchen wir Dateihandhabung in C?

Bisher werden die Operationen mit dem C-Programm an einer Eingabeaufforderung/Terminal ausgeführt, die nirgendwo gespeichert ist. Die Ausgabe wird gelöscht, wenn das Programm geschlossen wird. Aber in der Softwareindustrie sind die meisten Programme so geschrieben, dass sie die vom Programm abgerufenen Informationen speichern. Der Einsatz von File-Handling ist genau das, was die Situation erfordert.



Um zu verstehen, warum die Dateiverwaltung wichtig ist, werfen wir einen Blick auf einige Funktionen der Dateiverwendung:

  • Wiederverwendbarkeit: Die in der Datei gespeicherten Daten können überall und jederzeit abgerufen, aktualisiert und gelöscht werden, was eine hohe Wiederverwendbarkeit gewährleistet.
  • Portabilität: Ohne Datenverlust können Dateien auf einen anderen übertragen werden im Computersystem. Das Risiko einer fehlerhaften Codierung wird mit dieser Funktion minimiert.
  • Effizient: Für einige Programme kann eine große Eingabemenge erforderlich sein. Durch die Dateiverwaltung können Sie mit wenigen Anweisungen problemlos auf einen Teil einer Datei zugreifen, was viel Zeit spart und das Fehlerrisiko verringert.
  • Speicherkapazität: Mit Dateien können Sie große Datenmengen speichern, ohne sich darum kümmern zu müssen, alles gleichzeitig in einem Programm zu speichern.

Dateitypen in C

Eine Datei kann basierend auf der Art und Weise, wie die Datei die Daten speichert, in zwei Typen eingeteilt werden. Sie sind wie folgt:

  • Textdateien
  • Binärdateien



1. Textdateien

Eine Textdatei enthält Daten in der Form von ASCII-Zeichen und wird im Allgemeinen zum Speichern eines Zeichenstroms verwendet.

  • Jede Zeile in einer Textdatei endet mit einem neuen Zeilenzeichen („ “).
  • Es kann von jedem Texteditor gelesen oder geschrieben werden.
  • Sie werden im Allgemeinen mit gespeichert .txt Dateierweiterung.
  • Zur Speicherung des Quellcodes können auch Textdateien verwendet werden.

2. Binärdateien

Eine Binärdatei enthält Daten in binäre Form (d. h. 0 und 1) anstelle von ASCII-Zeichen. Sie enthalten Daten, die auf ähnliche Weise gespeichert werden wie im Hauptspeicher.

  • Die Binärdateien können nur innerhalb eines Programms erstellt werden und ihr Inhalt kann nur von einem Programm gelesen werden.
  • Sicherer, da sie nicht leicht lesbar sind.
  • Sie werden im Allgemeinen mit gespeichert .Behälter Dateierweiterung.

C-Dateioperationen

C-Dateioperationen beziehen sich auf die verschiedenen möglichen Operationen, die wir an einer Datei in C ausführen können, wie zum Beispiel:



  1. Eine neue Datei erstellen – fopen() mit Attributen wie a oder a+ oder w oder w+
  2. Eine bestehende Datei öffnen – fopen()
  3. Aus Datei lesen – fscanf() oder fgets()
  4. In eine Datei schreiben – fprintf() oder fputs()
  5. An einen bestimmten Ort in einer Datei verschieben – fseek() , zurückspulen()
  6. Eine Datei schließen – fclose()

Der hervorgehobene Text erwähnt die C-Funktion, die zum Ausführen der Dateioperationen verwendet wird.

Funktionen für C-Dateioperationen

Dateiverwaltung in c

Dateizeiger in C

Ein Dateizeiger ist ein Verweis auf eine bestimmte Position in der geöffneten Datei. Es wird bei der Dateiverwaltung verwendet, um alle Dateivorgänge wie Lesen, Schreiben, Schließen usw. auszuführen. Wir verwenden die DATEI Makro zum Deklarieren der Dateizeigervariablen. Das FILE-Makro ist darin definiert Header-Datei.

Syntax des Dateizeigers

  FILE*     pointer_name  ;>

Der Dateizeiger wird in fast allen Dateioperationen in C verwendet.

Öffnen Sie eine Datei in C

Zum Öffnen einer Datei in C ist die fopen() Die Funktion wird mit dem Dateinamen oder Dateipfad zusammen mit den erforderlichen Zugriffsmodi verwendet.

Syntax von fopen()

FILE*   fopen  (const char *  file_name  , const char *  access_mode  );>

Parameter

  • Dateiname : Name der Datei, wenn sie im selben Verzeichnis wie die Quelldatei vorhanden ist. Ansonsten vollständiger Pfad.
  • Zugriffsmodus: Gibt an, für welchen Vorgang die Datei geöffnet wird.

Rückgabewert

  • Wenn die Datei erfolgreich geöffnet wurde, wird ein Dateizeiger darauf zurückgegeben.
  • Wenn die Datei nicht geöffnet ist, wird NULL zurückgegeben.

Dateiöffnungsmodi in C

Dateiöffnungsmodi oder Zugriffsmodi geben die zulässigen Vorgänge für die zu öffnende Datei an. Sie werden als Argument an die Funktion fopen() übergeben. Einige der häufig verwendeten Dateizugriffsmodi sind unten aufgeführt:

Öffnungsmodi Beschreibung
R Durchsucht die Datei. Wenn die Datei erfolgreich geöffnet wurde, lädt fopen( ) sie in den Speicher und richtet einen Zeiger ein, der auf das erste Zeichen darin zeigt. Wenn die Datei nicht geöffnet werden kann, gibt fopen( ) NULL zurück.
rb Zum Lesen im Binärmodus geöffnet. Wenn die Datei nicht existiert, gibt fopen( ) NULL zurück.
In Zum Schreiben im Textmodus öffnen. Wenn die Datei vorhanden ist, wird ihr Inhalt überschrieben. Wenn die Datei nicht vorhanden ist, wird eine neue Datei erstellt. Gibt NULL zurück, wenn die Datei nicht geöffnet werden kann.
wb Zum Schreiben im Binärmodus geöffnet. Wenn die Datei vorhanden ist, wird ihr Inhalt überschrieben. Wenn die Datei nicht existiert, wird sie erstellt.
A Durchsucht die Datei. Wenn die Datei erfolgreich geöffnet wurde, lädt fopen( ) sie in den Speicher und richtet einen Zeiger ein, der auf das letzte Zeichen darin zeigt. Es wird nur im Anhängemodus geöffnet. Wenn die Datei nicht vorhanden ist, wird eine neue Datei erstellt. Gibt NULL zurück, wenn die Datei nicht geöffnet werden kann.
ab Zum Anhängen im Binärmodus geöffnet. Die Daten werden am Ende der Datei hinzugefügt. Wenn die Datei nicht existiert, wird sie erstellt.
r+ Durchsucht die Datei. Es wurde erfolgreich geöffnet. fopen( ) lädt es in den Speicher und richtet einen Zeiger ein, der auf das erste Zeichen darin zeigt. Gibt NULL zurück, wenn die Datei nicht geöffnet werden kann.
rb+ Offen für Lesen und Schreiben im Binärmodus. Wenn die Datei nicht existiert, gibt fopen( ) NULL zurück.
w+ Durchsucht die Datei. Wenn die Datei vorhanden ist, wird ihr Inhalt überschrieben. Wenn die Datei nicht existiert, wird eine neue Datei erstellt. Gibt NULL zurück, wenn die Datei nicht geöffnet werden kann.
wb+ Offen für Lesen und Schreiben im Binärmodus. Wenn die Datei vorhanden ist, wird ihr Inhalt überschrieben. Wenn die Datei nicht existiert, wird sie erstellt.
a+ Durchsucht die Datei. Wenn die Datei erfolgreich geöffnet wurde, lädt fopen( ) sie in den Speicher und richtet einen Zeiger ein, der auf das letzte Zeichen darin zeigt. Die Datei wird sowohl im Lese- als auch im Anhängemodus geöffnet. Wenn die Datei nicht vorhanden ist, wird eine neue Datei erstellt. Gibt NULL zurück, wenn die Datei nicht geöffnet werden kann.
ab+ Offen zum Lesen und Anhängen im Binärmodus. Wenn die Datei nicht existiert, wird sie erstellt.

Wie oben angegeben, müssen Sie, wenn Sie Operationen an einer Binärdatei ausführen möchten, am Ende „b“ anhängen. Anstelle von w müssen Sie beispielsweise wb verwenden, anstelle von a+ müssen Sie a+b verwenden.

String-Array

Beispiel für das Öffnen einer Datei

C




// C Program to illustrate file opening> #include> #include> int> main()> {> >// file pointer variable to store the value returned by> >// fopen> >FILE>* fptr;> >// opening the file in read mode> >fptr =>fopen>(>'filename.txt'>,>'r'>);> >// checking if the file is opened successfully> >if> (fptr == NULL) {> >printf>(>'The file is not opened. The program will '> >'now exit.'>);> >exit>(0);> >}> >return> 0;> }>

>

>

Ausgabe

The file is not opened. The program will now exit.>

Die Datei wird nicht geöffnet, da sie im Quellverzeichnis nicht vorhanden ist. Die Funktion fopen() ist aber auch in der Lage, eine Datei zu erstellen, wenn diese nicht existiert. Es ist unten dargestellt

Erstellen Sie eine Datei in C

Die Funktion fopen() kann nicht nur eine Datei öffnen, sondern auch eine Datei erstellen, wenn diese noch nicht vorhanden ist. Dazu müssen wir die Modi verwenden, die die Erstellung einer Datei ermöglichen, wenn sie nicht gefunden wird, wie z. B. w, w+, wb, wb+, a, a+, ab und ab+.

FILE *fptr; fptr =   fopen  ('  filename.txt  ', '  w  ');>

Beispiel für das Öffnen einer Datei

C




// C Program to create a file> #include> #include> int> main()> {> >// file pointer> >FILE>* fptr;> >// creating file using fopen() access mode 'w'> >fptr =>fopen>(>'file.txt'>,>'w'>);> >// checking if the file is created> >if> (fptr == NULL) {> >printf>(>'The file is not opened. The program will '> >'exit now'>);> >exit>(0);> >}> >else> {> >printf>(>'The file is created Successfully.'>);> >}> > >return> 0;> }>

>

>

Ausgabe

The file is created Successfully.>

Aus einer Datei lesen

Der Dateilesevorgang in C kann mit den Funktionen fscanf() oder fgets() durchgeführt werden. Beide Funktionen führen die gleichen Operationen wie scanf aus und erhalten jedoch einen zusätzlichen Parameter, den Dateizeiger. Es gibt auch andere Funktionen, mit denen wir aus einer Datei lesen können. Solche Funktionen sind unten aufgeführt:

Funktion Beschreibung
fscanf() Verwenden Sie eine Liste mit formatierten Zeichenfolgen und Variablenargumenten, um Eingaben aus einer Datei zu übernehmen.
fgets() Geben Sie die gesamte Zeile aus der Datei ein.
fgetc() Liest ein einzelnes Zeichen aus der Datei.
erhalten() Liest eine Zahl aus einer Datei.
Angst() Liest die angegebenen Datenbytes aus einer Binärdatei.

Es hängt also von Ihnen ab, ob Sie die Datei Zeile für Zeile oder Zeichen für Zeichen lesen möchten.

Beispiel:

FILE * fptr;  fptr = fopen(fileName.txt, r); fscanf(fptr, '%s %s %s %d', str1, str2, str3, &year); char c = fgetc(fptr);>

getc() und einige andere Funktionen zum Lesen von Dateien geben EOF (End Of File) zurück, wenn sie beim Lesen das Ende der Datei erreichen. EOF gibt das Ende der Datei an und sein Wert ist durch die Implementierung definiert.

Notiz: Hierbei ist zu beachten, dass nach dem Lesen eines bestimmten Teils der Datei der Dateizeiger automatisch an das Ende des zuletzt gelesenen Zeichens verschoben wird.

In eine Datei schreiben

Die Dateischreibvorgänge können durch die Funktionen fprintf() und fputs() mit Ähnlichkeiten zu Lesevorgängen ausgeführt werden. Die C-Programmierung bietet auch einige andere Funktionen, die zum Schreiben von Daten in eine Datei verwendet werden können, wie zum Beispiel:

Funktion Beschreibung
fprintf() Ähnlich wie printf() verwendet diese Funktion formatierte Zeichenfolgen und eine Liste variabler Argumente, um die Ausgabe in die Datei zu drucken.
fputs() Druckt die gesamte Zeile in der Datei und eine neue Zeile am Ende.
fputc() Druckt ein einzelnes Zeichen in die Datei.
fputw() Gibt eine Zahl in die Datei aus.
fwrite() Diese Funktion schreibt die angegebene Anzahl an Bytes in die Binärdatei.

Beispiel:

FILE *fptr ;  fptr = fopen(fileName.txt, w); fprintf(fptr, '%s %s %s %d', 'We', 'are', 'in', 2012); fputc('a', fptr);>

Eine Datei schließen

Zum Schließen der Datei wird die Funktion fclose() verwendet. Nach erfolgreichen Dateivorgängen müssen Sie eine Datei immer schließen, um sie aus dem Speicher zu entfernen.

Syntax von fclose()

  fclose  (  file_pointer  );>

bei dem die file_pointer ist der Zeiger auf die geöffnete Datei.

Beispiel:

FILE *fptr ; fptr= fopen(fileName.txt, w); ----------   Some file Operations   ------- fclose(fptr);>

Beispiele für die Dateiübergabe in C

Beispiel 1: Programm zum Erstellen einer Datei, zum Schreiben darin und zum Schließen der Datei

C




// C program to Open a File,> // Write in it, And Close the File> #include> #include> int> main()> {> >// Declare the file pointer> >FILE>* filePointer;> >// Get the data to be written in file> >char> dataToBeWritten[50] =>'techcodeview.com-A Computer '> >'Science Portal for Geeks'>;> >// Open the existing file GfgTest.c using fopen()> >// in write mode using 'w' attribute> >filePointer =>fopen>(>'GfgTest.c'>,>'w'>);> >// Check if this filePointer is null> >// which maybe if the file does not exist> >if> (filePointer == NULL) {> >printf>(>'GfgTest.c file failed to open.'>);> >}> >else> {> >printf>(>'The file is now opened. '>);> >// Write the dataToBeWritten into the file> >if> (>strlen>(dataToBeWritten)>0) {> >// writing in the file using fputs()> >fputs>(dataToBeWritten, filePointer);> >fputs>(>' '>, filePointer);> >}> >// Closing the file using fclose()> >fclose>(filePointer);> >printf>(>'Data successfully written in file '> >'GfgTest.c '>);> >printf>(>'The file is now closed.'>);> >}> > >return> 0;> }>

>

>

Ausgabe

Array von Strukturen in C-Sprache
The file is now opened. Data successfully written in file GfgTest.c The file is now closed.>

Dieses Programm erstellt eine Datei mit dem Namen GfgTest.c im selben Verzeichnis wie die Quelldatei, die den folgenden Text enthält: techcodeview.com – Ein Informatikportal für Geeks.

Beispiel 2: Programm zum Öffnen einer Datei, zum Lesen daraus und zum Schließen der Datei

C




// C program to Open a File,> // Read from it, And Close the File> #include> #include> int> main()> {> >// Declare the file pointer> >FILE>* filePointer;> >// Declare the variable for the data to be read from> >// file> >char> dataToBeRead[50];> >// Open the existing file GfgTest.c using fopen()> >// in read mode using 'r' attribute> >filePointer =>fopen>(>'GfgTest.c'>,>'r'>);> >// Check if this filePointer is null> >// which maybe if the file does not exist> >if> (filePointer == NULL) {> >printf>(>'GfgTest.c file failed to open.'>);> >}> >else> {> >printf>(>'The file is now opened. '>);> >// Read the dataToBeRead from the file> >// using fgets() method> >while> (>fgets>(dataToBeRead, 50, filePointer)> >!= NULL) {> >// Print the dataToBeRead> >printf>(>'%s'>, dataToBeRead);> >}> >// Closing the file using fclose()> >fclose>(filePointer);> >printf>(> >'Data successfully read from file GfgTest.c '>);> >printf>(>'The file is now closed.'>);> >}> >return> 0;> }>

>

>

Ausgabe

Git, füge alles hinzu
The file is now opened. techcodeview.com-A Computer Science Portal for Geeks Data successfully read from file GfgTest.c The file is now closed.>

Dieses Programm liest den Text aus der Datei namens GfgTest.c, die wir im vorherigen Beispiel erstellt haben, und gibt ihn in der Konsole aus.

Lesen und Schreiben in einer Binärdatei

Bisher haben wir nur Textdateioperationen besprochen. Die Operationen an einer Binärdatei ähneln mit geringen Unterschieden den Operationen an Textdateien.

Öffnen einer Binärdatei

Um eine Datei im Binärmodus zu öffnen, verwenden wir in der Funktion fopen() die Zugriffsmodi rb, rb+, ab, ab+, wb und wb+. Wir verwenden auch die Dateierweiterung .bin im Binärdateinamen.

Beispiel

fptr = fopen('filename.bin', 'rb');>

Schreiben Sie in eine Binärdatei

Wir verwenden die Funktion fwrite(), um Daten in eine Binärdatei zu schreiben. Die Daten werden in Form von Bits (0 und 1) in die Binärdatei geschrieben.

Syntax von fwrite()

size_t   fwrite  (const void *  ptr  , size_t   size  , size_t   nmemb  , FILE *  file_pointer  );>

Parameter:

  • ptr: Zeiger auf den Speicherblock, der geschrieben werden soll.
  • Größe: Größe jedes zu schreibenden Elements (in Bytes).
  • nmemb: Anzahl der Elemente.
  • file_pointer : FILE-Zeiger auf den Ausgabedateistream.

Rückgabewert:

  • Anzahl der geschriebenen Objekte.

Beispiel: Programm zum Schreiben in eine Binärdatei mit fwrite()

C




// C program to write to a Binary file using fwrite()> #include> #include> struct> threeNum {> >int> n1, n2, n3;> };> int> main()> {> >int> n;> >// Structure variable declared here.> >struct> threeNum num;> >FILE>* fptr;> >if> ((fptr =>fopen>(>'C:program.bin'>,>'wb'>)) == NULL) {> >printf>(>'Error! opening file'>);> >// If file pointer will return NULL> >// Program will exit.> >exit>(1);> >}> >int> flag = 0;> >// else it will return a pointer to the file.> >for> (n = 1; n <5; ++n) {> >num.n1 = n;> >num.n2 = 5 * n;> >num.n3 = 5 * n + 1;> >flag =>fwrite>(&num,>sizeof>(>struct> threeNum), 1,> >fptr);> >}> >// checking if the data is written> >if> (!flag) {> >printf>(>'Write Operation Failure'>);> >}> >else> {> >printf>(>'Write Operation Successful'>);> >}> >fclose>(fptr);> > >return> 0;> }>

>

>

Ausgabe

Write Operation Successful>

Aus Binärdatei lesen

Mit der Funktion fread() können Daten aus einer Binärdatei in C gelesen werden. Die Daten werden in derselben Form aus der Datei gelesen, in der sie gespeichert sind, d. h. in binärer Form.

Syntax von fread()

size_t   fread  (void *  ptr  , size_t   size  , size_t   nmemb  , FILE *  file_pointer  );>

Parameter:

  • ptr: Zeiger auf den Speicherblock, der gelesen werden soll.
  • Größe: die Größe jedes zu lesenden Elements (in Bytes).
  • nmemb: Anzahl der Elemente.
  • file_pointer : FILE-Zeiger auf den Eingabedateistream.

Rückgabewert:

  • Anzahl der geschriebenen Objekte.

Beispiel: Programm zum Lesen aus einer Binärdatei mit fread()

C




// C Program to Read from a binary file using fread()> #include> #include> 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'>);> >// If file pointer will return NULL> >// Program will exit.> >exit>(1);> >}> >// else it will return a pointer to the file.> >for> (n = 1; n <5; ++n) {> >fread>(&num,>sizeof>(>struct> threeNum), 1, fptr);> >printf>(>'n1: %d n2: %d n3: %d '>, num.n1, num.n2,> >num.n3);> >}> >fclose>(fptr);> >return> 0;> }>

>

>

Ausgabe

n1: 1 n2: 5 n3: 6 n1: 2 n2: 10 n3: 11 n1: 3 n2: 15 n3: 16 n1: 4 n2: 20 n3: 21>

fseek() in C

Wenn wir mehrere Datensätze in einer Datei haben und auf einen bestimmten Datensatz zugreifen müssen, der sich an einer bestimmten Position befindet, müssen wir alle Datensätze davor durchlaufen, um den Datensatz zu erhalten. Dadurch wird viel Speicher und Betriebszeit verschwendet. Um den Speicherverbrauch und die Betriebszeit zu reduzieren, können wir verwenden fseek() Dies bietet eine einfachere Möglichkeit, an die erforderlichen Daten zu gelangen. Die Funktion fseek() in C sucht den Cursor zum angegebenen Datensatz in der Datei.

Syntax für fseek()

int fseek(FILE *ptr, long int offset, int pos);>

Beispiel für fseek()

C




// C Program to demonstrate the use of fseek() in C> #include> int> main()> {> >FILE>* fp;> >fp =>fopen>(>'test.txt'>,>'r'>);> >// Moving pointer to end> >fseek>(fp, 0, SEEK_END);> >// Printing position of pointer> >printf>(>'%ld'>,>ftell>(fp));> >return> 0;> }>

>

>

Ausgabe

81>

rewind() in C

Der zurückspulen() Die Funktion wird verwendet, um den Dateizeiger an den Anfang der Datei zu bringen. Es kann anstelle von fseek() verwendet werden, wenn Sie den Dateizeiger am Anfang haben möchten.

Syntax von rewind()

  rewind   (  file_pointer  );>

Beispiel

C




// C program to illustrate the use of rewind> #include> int> main()> {> >FILE>* fptr;> >fptr =>fopen>(>'file.txt'>,>'w+'>);> >fprintf>(fptr,>'Geeks for Geeks '>);> >// using rewind()> >rewind>(fptr);> >// reading from file> >char> buf[50];> >fscanf>(fptr,>'%[^ ]s'>, buf);> >printf>(>'%s'>, buf);> >return> 0;> }>

>

Ostereier in Android

>

Ausgabe

Geeks for Geeks>

Weitere Funktionen für C-Dateioperationen

In der folgenden Tabelle sind einige weitere Funktionen aufgeführt, mit denen Dateioperationen ausgeführt oder bei deren Ausführung unterstützt werden können.

Funktionen Beschreibung
fopen() Es wird zum Erstellen einer Datei oder zum Öffnen einer Datei verwendet.
fclose() Es wird verwendet, um eine Datei zu schließen.
fgets() Es wird zum Lesen einer Datei verwendet.
fprintf() Es wird verwendet, um Datenblöcke in eine Datei zu schreiben.
fscanf() Es wird verwendet, um Datenblöcke aus einer Datei zu lesen.
getc() Es wird verwendet, um ein einzelnes Zeichen in eine Datei einzulesen.
putc() Es wird verwendet, um ein einzelnes Zeichen in eine Datei zu schreiben.
fseek() Es wird verwendet, um die Position eines Dateizeigers auf einen angegebenen Speicherort festzulegen.
ftell() Es wird verwendet, um die aktuelle Position eines Dateizeigers zurückzugeben.
zurückspulen() Es wird verwendet, um den Dateizeiger auf den Anfang einer Datei zu setzen.
putw() Es wird verwendet, um eine Ganzzahl in eine Datei zu schreiben.
Erhalten w() Es wird verwendet, um eine Ganzzahl aus einer Datei zu lesen.