Technologieaustausch

[C-Sprache] Spielen Sie mit Dateioperationen

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

🌟🌟Homepage des Autors:Vergängliches__

🌟🌟Zugehörige Spalte:C Sprache

Inhaltsverzeichnis

Einführung

1. Dateien öffnen und schließen

1. fließen

2. Standardfluss

3. Textdateien und Binärdateien

4. Funktionen, die das Öffnen und Schließen von Dateien steuern

2. Sequentielles Lesen und Schreiben von Dateien

3. Zufälliges Lesen und Schreiben von Dateien

1.fseek-Funktion

2.ftell-Funktion

3. Rückspulfunktion

4. Bestimmung des Endes des Dateilesens

Zusammenfassen


Einführung

Wenn wir Programme schreiben, speichern wir Daten oft in Variablen. Wenn das Programm beendet wird und der Speicher zurückgewonnen wird, gehen diese Daten verloren. Gibt es für uns also eine Möglichkeit, diese Daten dauerhaft zu speichern, sodass die Daten auch dann noch vorhanden sind, wenn das Programm erneut geöffnet wird? Die Antwort ist ja. Was dies tun kann, ist:Dateioperationen

1. Dateien öffnen und schließen

1. fließen

Die Daten des Programms müssen an externe Geräte ausgegeben und auch von externen Geräten eingegeben werden. Für verschiedene Geräte sind die Eingabe- und Ausgabemethoden unterschiedlich. Um unsere Operationen auf verschiedenen Eingabe- und Ausgabegeräten zu erleichtern, haben wir das hochabstrakte Konzept des „Streams“ verwendet. In der C-Sprache werden Eingabe- und Ausgabevorgänge für Dateien, Bildschirme, Tastaturen usw. alle über „Streams“ ausgeführt. Wenn wir Daten schreiben oder lesen möchten, müssen wir im Allgemeinen den Stream öffnen.

2. Standardfluss

Wenn ein C-Sprachprogramm gestartet wird, ist es standardmäßig aufdrei StrömeBereits für uns geöffnet:

stdin--Standard-Eingabestream, Eingabe in den meisten Fällen über die Tastatur.

stdout--Standardausgabestream, in den meisten Fällen Ausgabe auf dem Monitor.

stderr--Standardfehlerstrom, in den meisten Fällen Ausgabe auf dem Monitor.

Da diese drei Streams standardmäßig geöffnet sind, können wir mithilfe von Funktionen wie scanf und printf Eingabe- und Ausgabevorgänge direkt ausführen.

Diese drei Streams haben auch Typen. Ihre Typen sind:Dateizeiger (FILE*) .Wenn wir Dateioperationen ausführen, bestehen wirDie Dateizeigervariable kann indirekt die ihr zugeordnete Datei finden.

3. Textdateien und Binärdateien

Abhängig von der Organisation der Daten werden Datendateien aufgerufenTextdateioderBinärdatei . Daten werden in binärer Form im Speicher gespeichert,Wenn es ohne Konvertierung in eine externe Speicherdatei ausgegeben wird, ist dies der FallBinärdatei
Wenn es im ASCII-Code in einem externen Speicher gespeichert werden soll, muss es vor der Speicherung konvertiert werden.Eine Datei, die in Form von ASCII-Zeichen gespeichert istTextdatei
Wie werden Daten in einer Datei gespeichert?
Zeichen werden immer im ASCII-Format gespeichert und numerische Daten können entweder im ASCII- oder Binärformat gespeichert werden. Wenn es beispielsweise eine Ganzzahl von 10000 gibt und diese in Form eines ASCII-Codes auf die Festplatte ausgegeben wird, belegt sie 5 Bytes auf der Festplatte (ein Byte für jedes Zeichen), während sie bei der Ausgabe in binärer Form 5 Bytes auf der Festplatte belegt belegt nur 4 Bytes auf der Festplatte.

4. Funktionen, die das Öffnen und Schließen von Dateien steuern

Nachdem wir diese erforderlichen Kenntnisse verstanden haben, kommen wir zum Punkt – dem Öffnen und Schließen von Dateien. Die Sprache C bietet zwei Funktionen, die für das Öffnen bzw. Schließen von Dateien verantwortlich sind. Die Prototypen lauten wie folgt:

öffne einen Ordner:
DATEI * föffnen (const char * Dateiname, const char * Modus);
Schließen Sie die Datei:
int schließen ( Datenfluss );

Die fopen-Funktion hat zwei Parameter:Der erste Parameter wird in Form einer Zeichenfolge ausgedrücktDateiname, der zweite Parameter ist die DateiOffene Methode, dargestellt durch eine Zeichenfolge .Wenn wir diese Funktion verwenden, müssen wir eine erstellenDateizeigervariable Wenn die Datei nicht geöffnet werden kann, wird beim Empfang ein Nullzeiger zurückgegeben. Bezüglich der Öffnungsmethoden sind hier die folgenden:

Offene MethodeBedeutungWenn die angegebene Datei nicht existiert
„r“ (schreibgeschützt)
Um Daten einzugeben, öffnen Sie eine vorhandene Textdatei
Gibt einen Nullzeiger zurück
„w“ (nur Schreiben)
Um Daten auszugeben, öffnen Sie eine Textdatei
Erstellen Sie eine neue Datei
„a“ (anhängen)Fügen Sie Daten am Ende der Textdatei hinzuErstellen Sie eine neue Datei
„rb“ (schreibgeschützt)Um Daten einzugeben, öffnen Sie eine BinärdateiGibt einen Nullzeiger zurück
„wb“ (nur Schreiben)Um Daten auszugeben, öffnen Sie eine BinärdateiErstellen Sie eine neue Datei
„ab“ (anhängen)Fügen Sie Daten am Ende einer Binärdatei hinzuErstellen Sie eine neue Datei
„r+“ (lesen und schreiben)Öffnen Sie zum Lesen und Schreiben eine TextdateiGibt einen Nullzeiger zurück
„w+“ (lesen und schreiben)Erstellen Sie zum Lesen und Schreiben eine neue TextdateiErstellen Sie eine neue Datei
„a+“ (lesen und schreiben)Öffnen Sie eine Datei und lesen und schreiben Sie am Ende der DateiErstellen Sie eine neue Datei
„rb+“ (lesen und schreiben)Öffnen Sie eine Binärdatei zum Lesen und SchreibenGibt einen Nullzeiger zurück
„wb+“ (lesen und schreiben)
Erstellen Sie zum Lesen und Schreiben eine neue BinärdateiErstellen Sie eine neue Datei
„ab+“ (lesen und schreiben)
Öffnen Sie eine Binärdatei und lesen und schreiben Sie am Ende der DateiErstellen Sie eine neue Datei

Für die Funktion fclose ist der Parameter der Dateizeiger, der zum Schließen der Datei verwendet wird, auf die der Dateizeiger zeigt.

Als nächstes versuchen wir, eine Datei zu öffnen und zu schließen:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. FILE* pf = fopen("test.txt", "w");
  5. if (pf == NULL)//文件打开失败则退出程序
  6. {
  7. perror("fopen");
  8. return 0;
  9. }
  10. printf("文件打开成功n");
  11. fclose(pf);
  12. pf = NULL;//避免出现野指针,及时制空
  13. return 0;
  14. }
Operationsergebnis:

Da die Öffnungsmethode „w“ ist, ist ersichtlich, dass im Pfad eine Datei mit dem Namen „test.txt“ angezeigt wird.

2. Sequentielles Lesen und Schreiben von Dateien

Als nächstes stellen wir mehrere Funktionen für vorDaten in eine Datei lesen oder schreiben

FunktionsnameFunktionAnwendbar auf
fgetcZeicheneingabefunktionAlle Eingabeströme
fputcZeichenausgabefunktionAlle Ausgabeströme
fgetsFunktion zur TextzeileneingabeAlle Eingabeströme
fputsFunktion zur TextzeilenausgabeAlle Ausgabeströme
fscanfEingabefunktion formatierenAlle Eingabeströme
fdruckenfAusgabefunktion formatieren Alle Ausgabeströme
FurchtBinärer EingangDateieingabestream
schreibenBinärer AusgangDateiausgabestream

Als nächstes versuchen wir es zu verwendenfscanfUndfdruckenfFunktion:

Der erste Parameter dieser beiden Funktionen ist ein Dateizeiger, der zum Lesen und Schreiben von Dateidaten verwendet wird. Die folgenden Parameter sind dieselben wie die Funktionen scanf und printf.

  1. #include <stdio.h>
  2. int main()
  3. {
  4. FILE* pf = fopen("test.txt", "w");//要写入数据,以写的形式打开文件
  5. if (pf == NULL)
  6. {
  7. perror("fopen");
  8. return 0;
  9. }
  10. fprintf(pf, "123456");//向文件中写入数据
  11. fclose(pf);
  12. pf = NULL;
  13. return 0;
  14. }

Wie Sie sehen, wurden die Daten in die Datei geschrieben. Als nächstes verwenden wir die Funktion fscanf, um die Dateidaten auf dem Bildschirm auszudrucken:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char str[20] = { 0 };
  5. FILE* pf = fopen("test.txt", "r");//要读取数据,以读的形式打开文件
  6. if (pf == NULL)
  7. {
  8. perror("fopen");
  9. return 0;
  10. }
  11. fscanf(pf, "%s", str);//读取数据到str当中
  12. printf(str);
  13. fclose(pf);
  14. pf = NULL;
  15. return 0;
  16. }
Operationsergebnis:

3. Zufälliges Lesen und Schreiben von Dateien

1.fseek-Funktion

Die Funktion der fseek-Funktion istBasierend auf der Position und dem Offset des DateizeigersPositionDateizeiger . Sein Prototyp ist wie folgt:

int fseek (DATEI * Stream, langer int-Offset, int-Ursprung);

Sein erster Parameter ist der Dateizeiger, der zweite Parameter ist der Offset relativ zur eingestellten Position und der dritte Parameter ist die eingestellte Position.

Die C-Sprache definiert dreiMakro, können Sie einen davon als dritten Parameter auswählen:

SEEK_SET: Startposition der Datei

SEEK_CUR: Die aktuelle Position des Dateizeigers

SEEK_END: ​​Ende der Datei

Nachdem wir den Dateizeiger gefunden haben, können wir am angegebenen Speicherort der Datei lesen oder schreiben.

2.ftell-Funktion

Für die Rückkehr wird die Funktion ftell verwendetDer Offset des Dateizeigers relativ zur Startposition . Funktionsprototyp:

lange int ftell (DATEI * Stream);

3. Rückspulfunktion

Die Rückspulfunktion wird verwendet fürGibt die Position des Dateizeigers an den Anfang der Datei zurück . Sein Funktionsprototyp:

void rewind (DATEI * Stream);

4. Bestimmung des Endes des Dateilesens

1. FürTextdatei, können wir zuerst verwendenfgetcDie Funktion durchläuft die Zeichen in der Datei, bis EOF gelesen wird, was anzeigtDas Lesen der Datei wird beendet

2. FürBinärdatei,Wir gebrauchenFurchtDie Funktion ermittelt ihren Rückgabewert:Ist es kleiner als die tatsächlich abzulesende Zahl? .Wenn es weniger als istDie Lektüre endet.

Für die beiden oben genannten Fälle ist die DateiAm Ende der Lektüre, können wir weiterhin urteilenGrund, warum das Lesen der Datei beendet wurde . Führen Sie zwei Funktionen ein:feofUndferrer

feofFunktion verwendet fürBestimmen Sie das Ende des DateilesensGrundob oder nichtEnde der Datei festgestellt . Sein Prototyp ist wie folgt:

int feof (DATEI * Stream);

Wenn die Datei aufgrund vonBis zum Ende der Datei lesenWenn der Lesevorgang abgeschlossen ist, wird EOF zurückgegeben; in anderen Fällen wird 0 zurückgegeben.

        ferrerFunktion verwendet fürBestimmen Sie das Ende des DateilesensGrundob oder nichtEs ist ein E/A-Fehler aufgetreten . Der Prototyp sieht wie folgt aus:

int ferror (DATEI * Stream);

Wenn die Datei aufgrund vonEs ist ein E/A-Fehler aufgetretenWenn der Lesevorgang abgeschlossen ist, wird ein Wert ungleich Null zurückgegeben; in anderen Fällen wird 0 zurückgegeben.

Als nächstes versuchen wir, einen Code zu schreiben, um das Ende des Dateilesens zu beurteilen:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int c = 0;
  5. FILE* fp = fopen("test.txt", "r");
  6. if (fp == NULL)
  7. {
  8. perror("fopen");
  9. return 0;
  10. }
  11. while ((c = fgetc(fp)) != EOF)//返回EOF则读取结束
  12. {
  13. putchar(c);
  14. }
  15. //判断读取结束的原因
  16. if (ferror(fp))
  17. puts("I/O错误n");
  18. else if (feof(fp))
  19. puts("文件读取结束n");
  20. fclose(fp);
  21. fp = NULL;
  22. return 0;
  23. }

Zusammenfassen

Heute haben wir etwas über Dateioperationen gelernt, wie man Dateien öffnet und schließt, Daten schreibt oder Daten aus Dateien liest, Funktionen zum Anpassen von Dateizeigern und das Bestimmen des Endes des Dateilesens. Wenn Sie denken, dass das, was der Blogger gesagt hat, gut ist, hinterlassen Sie bitte ein kleines „Gefällt mir“ und bedanken Sie sich für Ihre Unterstützung❤❤❤