Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

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?


Dateitypen

Beim Umgang mit Dateien gibt es zwei Arten von Dateien, die Sie kennen sollten:

  1. Textdateien
  2. 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:

  1. Erstellen einer neuen Datei
  2. Öffnen einer bestehenden Datei
  3. Schließen einer Datei
  4. 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");
Öffnungsmodi in Standard-E/A
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:

  1. Adresse der Daten, die auf die Festplatte geschrieben werden sollen
  2. Größe der Daten, die auf die Festplatte geschrieben werden sollen
  3. Anzahl dieser Art von Daten
  4. 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.

Andere Herkunft in fseek()
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

  1. Java-Dateiklasse
  2. Eine Einführung in STL-Dateien
  3. Verilog-Datei-IO-Operationen
  4. C - Datei-E/A
  5. C - Header-Dateien
  6. C - Fehlerbehandlung
  7. C++-Dateien und -Streams
  8. C++-Signalverarbeitung
  9. C# - Ausnahmebehandlung
  10. C# - Datei-E/A