2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
🌟🌟Homepage des Autors:Vergängliches__
🌟🌟Zugehörige Spalte:C Sprache
1. Dateien öffnen und schließen
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
4. Bestimmung des Endes des Dateilesens
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。
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.
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.。
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.
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 Methode | Bedeutung | Wenn 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 hinzu | Erstellen Sie eine neue Datei |
„rb“ (schreibgeschützt) | Um Daten einzugeben, öffnen Sie eine Binärdatei | Gibt einen Nullzeiger zurück |
„wb“ (nur Schreiben) | Um Daten auszugeben, öffnen Sie eine Binärdatei | Erstellen Sie eine neue Datei |
„ab“ (anhängen) | Fügen Sie Daten am Ende einer Binärdatei hinzu | Erstellen Sie eine neue Datei |
„r+“ (lesen und schreiben) | Öffnen Sie zum Lesen und Schreiben eine Textdatei | Gibt einen Nullzeiger zurück |
„w+“ (lesen und schreiben) | Erstellen Sie zum Lesen und Schreiben eine neue Textdatei | Erstellen Sie eine neue Datei |
„a+“ (lesen und schreiben) | Öffnen Sie eine Datei und lesen und schreiben Sie am Ende der Datei | Erstellen Sie eine neue Datei |
„rb+“ (lesen und schreiben) | Öffnen Sie eine Binärdatei zum Lesen und Schreiben | Gibt einen Nullzeiger zurück |
„wb+“ (lesen und schreiben)
| Erstellen Sie zum Lesen und Schreiben eine neue Binärdatei | Erstellen Sie eine neue Datei |
„ab+“ (lesen und schreiben)
| Öffnen Sie eine Binärdatei und lesen und schreiben Sie am Ende der Datei | Erstellen 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:
- #include <stdio.h>
-
- int main()
- {
- FILE* pf = fopen("test.txt", "w");
- if (pf == NULL)//文件打开失败则退出程序
- {
- perror("fopen");
- return 0;
- }
- printf("文件打开成功n");
- fclose(pf);
- pf = NULL;//避免出现野指针,及时制空
- return 0;
- }
Da die Öffnungsmethode „w“ ist, ist ersichtlich, dass im Pfad eine Datei mit dem Namen „test.txt“ angezeigt wird.
Als nächstes stellen wir mehrere Funktionen für vorDaten in eine Datei lesen oder schreiben。
Funktionsname | Funktion | Anwendbar auf |
fgetc | Zeicheneingabefunktion | Alle Eingabeströme |
fputc | Zeichenausgabefunktion | Alle Ausgabeströme |
fgets | Funktion zur Textzeileneingabe | Alle Eingabeströme |
fputs | Funktion zur Textzeilenausgabe | Alle Ausgabeströme |
fscanf | Eingabefunktion formatieren | Alle Eingabeströme |
fdruckenf | Ausgabefunktion formatieren | Alle Ausgabeströme |
Furcht | Binärer Eingang | Dateieingabestream |
schreiben | Binärer Ausgang | Dateiausgabestream |
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.
- #include <stdio.h>
-
- int main()
- {
- FILE* pf = fopen("test.txt", "w");//要写入数据,以写的形式打开文件
- if (pf == NULL)
- {
- perror("fopen");
- return 0;
- }
- fprintf(pf, "123456");//向文件中写入数据
- fclose(pf);
- pf = NULL;
- return 0;
- }
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:
- #include <stdio.h>
-
- int main()
- {
- char str[20] = { 0 };
- FILE* pf = fopen("test.txt", "r");//要读取数据,以读的形式打开文件
- if (pf == NULL)
- {
- perror("fopen");
- return 0;
- }
- fscanf(pf, "%s", str);//读取数据到str当中
- printf(str);
- fclose(pf);
- pf = NULL;
- return 0;
- }
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.
Für die Rückkehr wird die Funktion ftell verwendetDer Offset des Dateizeigers relativ zur Startposition . Funktionsprototyp:
lange int ftell (DATEI * Stream);
Die Rückspulfunktion wird verwendet fürGibt die Position des Dateizeigers an den Anfang der Datei zurück . Sein Funktionsprototyp:
void rewind (DATEI * Stream);
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:
- #include <stdio.h>
-
- int main()
- {
- int c = 0;
- FILE* fp = fopen("test.txt", "r");
- if (fp == NULL)
- {
- perror("fopen");
- return 0;
- }
- while ((c = fgetc(fp)) != EOF)//返回EOF则读取结束
- {
- putchar(c);
- }
- //判断读取结束的原因
- if (ferror(fp))
- puts("I/O错误n");
- else if (feof(fp))
- puts("文件读取结束n");
- fclose(fp);
- fp = NULL;
- return 0;
- }
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❤❤❤