C/C++ Programmierung · 6 min read · Oct 09, 2025
C/C++ Schritt-für-Schritt - Seite 12
12. Schritt-für-Schritt CorC++ — C Programmierung - Dateien
Dateiverwaltung
Einführung
Lass uns die Ausgabe des folgenden Programms finden.
| |
|
Ja, es akzeptiert einen Datensatz von Schülerinformationen und zeigt ihn an.
Hier ist dasselbe Programm, aber mit einigen Modifikationen.
| |
|
Die beiden oben genannten Programme sind gleich, aber das zweite Programm enthält eine hervorgehobene Anweisung ( FILE *fp = fopen(“stud.dat”, “a+”);) und einige Modifikationen wie ‘f printf’, ‘ fp’. Nur wenige Modifikationen wurden vorgenommen. Diese Modifikationen beeinflussen die Datenübertragung vom Konsolenbildschirm auf die Diskette in der Datei stud.dat. Dieser Prozess wird als Dateikontrolle/Dateiverwaltung/Dateiorganisation bezeichnet.
Dies ist der einfachste Weg, die Ausgabe vom Monitor in eine Datei zu übertragen, indem man eine Dateikontrollanweisung verwendet.
| |
|
Tatsächlich beinhaltet die Dateiverarbeitung viele Operationen sowie Methoden zur Implementierung. Hier ist der tatsächliche Prozess zur Handhabung von Dateien.
Dateiverwaltung
Generell muss jedes Programm die resultierenden Werte auf dem Bildschirm anzeigen (das 1. Programm veranschaulicht dies). Aber diese Werte werden aus dem Speicher entfernt, sobald das Programm beendet wird. Wenn wir die Datensätze dauerhaft speichern wollen, speichern wir sie in einer Datei. Jede Datei hat einige Operationen, hier sind einige;
| |
|
| |
|
Dateioperationen
| fopen | Öffnet den Stream-Dateinamen im Modus und gibt, wenn erfolgreich, einen Zeiger auf den neu geöffneten Stream zurück; andernfalls Null. |
| Syntax ** | FILE fopen(const char filename, const char *mode); |
| z.B. | FILE fp = fopen(“stud.dat”, “r”); / Aus Datei lesen /
FILE fp = fopen(“emp.dat”, “w”); / In Datei schreiben /
FILE fp = fopen(“emp.dat”, “a+”); / Lesen und Schreiben in Datei / | | | Modus:
Der Modus-String, der in Aufrufen von fopen verwendet wird, ist einer der folgenden Werte: Modus Beschreibung r Nur zum Lesen öffnen w Zum Schreiben erstellen (Wenn eine Datei mit diesem Namen bereits existiert, wird sie überschrieben). a Anhängen; zum Schreiben am Ende der Datei öffnen oder zum Schreiben erstellen, wenn die Datei nicht existiert. r+ Eine vorhandene Datei zum Aktualisieren (Lesen und Schreiben) öffnen w+ Eine neue Datei zum Aktualisieren (Lesen und Schreiben) erstellen.
Wenn eine Datei mit diesem Namen bereits existiert, wird sie überschrieben. a+ Zum Anhängen öffnen; zum Aktualisieren am Ende der Datei öffnen oder erstellen, wenn die Datei nicht existiert. Um anzugeben, dass eine bestimmte Datei im Textmodus geöffnet oder erstellt wird,
hänge “ t “ an den String an ( rt, w+t,* usw.).
Um den Binärmodus anzugeben, hänge “ b “ an den String an ( wb, a+b, usw.). | | fclose | Schließt die Datei, auf die fp zeigt, und gibt 0 bei Erfolg zurück, EOF wird im Fehlerfall zurückgegeben | | Syntax | Int fclose(FILE *fp); | | z.B. | Fclose(fp); fclose(stud); fcloseall(); | | fprintf | Sendet formatierte Ausgaben an einen Stream. Verwendet dieselben Formatbezeichner wie printf, sendet jedoch die Ausgabe an den angegebenen Stream. Gibt die Anzahl der ausgegebenen Bytes oder EOF im Fehlerfall zurück. | | Syntax | Fprintf(fptr, “Steuerzeichen”, Liste); | | z.B. | Fprintf(fp, “%d %s %d %d %d”, sno, name, sub1, sub2, sub3);
fprintf(emp, “%d %s %d”, eno, name, sal); | | fscanf | Diese Funktion wird verwendet, um formatierte Daten aus einer bestimmten Datei zu lesen. | | Syntax: | Fscanf(fptr, “Steuerzeichen”, Liste); | | z.B. | Fscanf(fp, “%d %s %d %d %d”, &sno, name, &sub1, &sub2, &sub3);
fscanff(emp, “%d %s %d”, &eno, name, &sal); | | fwrite | Fwrite fügt eine bestimmte Anzahl von gleich großen Datenelementen zu einer Ausgabedatei hinzu. | | Syntax: | Size_t fwrite(const void ptr, size_t size, size_t n, FILEstream); Argument Was es ist/tut Ptr Zeiger auf ein beliebiges Objekt; die geschriebenen Daten beginnen bei ptr Größe Länge jedes Datenelements N Anzahl der hinzuzufügenden Datenelemente stream Gibt die Ausgabedatei an
Die Gesamtanzahl der geschriebenen Bytes beträgt ( n Größe) | | fread | Fread ruft eine bestimmte Anzahl von gleich großen Datenelementen aus einer Eingabedatei ab. | | Syntax | Size_t fread(void ptr, size_t size, size_t n, FILEstream); Argument Was es ist/tut Ptr Zeiger auf ein beliebiges Objekt; die geschriebenen Daten beginnen bei ptr Größe Länge jedes Datenelements n Anzahl der hinzuzufügenden Datenelemente stream Gibt die Ausgabedatei an
Die Gesamtanzahl der geschriebenen Bytes beträgt ( n Größe) | | rewind | Setzt den Dateizeiger auf den Anfang des Streams zurück | | Syntax | Void rewind(FILE stream);
z.B. fewind(fp);
Rewind(stream) entspricht fseek(stream, 0L, SEEK_SET)
außer dass rewind die End-of-File- und Fehlerindikatoren löscht, während fseek nur den End-of-File-Indikator löscht. Nach rewind kann die nächste Operation auf einer Aktualisierungsdatei entweder Eingabe oder Ausgabe sein. | | fseek | Der Dateizeiger für den Stream wird auf die Anzahl der Bytes verschoben, die vom angegebenen whence-Position berechnet werden. Der Offset kann null, negativ oder positiv sein. Die definierten Symbole SEEK_CUR, SEEK_SET & SEEK_END werden als whence-Spezifizierer verwendet, um die aktuelle Position anzugeben. BOF & EOF entsprechend. Gibt 0 zurück, wenn erfolgreich oder eine andere Zahl bei Fehler. | | Syntax | Int fssek(FILE stream, long offset, int whence); | | ftell | Gibt die aktuelle Position des Dateizeigers bei Erfolg oder einen negativen Wert im Fehlerfall zurück. | | Syntax | Long ftell(FILE *stream); | | feof | Es ist ein Makro, das einen Wert ungleich Null zurückgibt, wenn das Ende der Datei im Stream erreicht wurde. | | Syntax | Int feof(FILE *stream); | | eof | Überprüft, ob der Positionsmarker in der Datei, die durch ihren Handle angegeben ist, am Ende der Datei ist. Wenn ja, gibt es 0 zurück, 1 wird zurückgegeben, wenn der Positionsmarker NICHT am Ende der Datei ist, und ein Fehler wird durch Setzen von errno und einem Rückgabewert von -1 angezeigt. | | Syntax | Int eof(int handle); | | fgets /
fputs | Die Funktion fgets/fputs erhält/legt einen String (von Größe n Bytes) in die Datei, auf die der Stream zeigt, und gibt das Ende der Datei im Fehlerfall zurück. | | Syntax | Char fgets(char s, int n, FILE *stream); | | fgetc/fputc
Syntax | Liest/schreibt ein Zeichen aus einem Stream.
Int fgetc/fputc(FILE *stream); | | fgetchar/
fputchar | Diese sind gleichwertig zu den oben genannten fgetc/fputc.
Schreibe ein Programm, um Daten eines Schülers zu lesen und in einer Datendatei zu speichern.
| | / Programm zum Erstellen einer Schülerdatendatei /
/ 85_write.c /
#include
#include
#include
int main()
{
int sno, sub1, sub2, sub3;
char name[10],ch;
FILE *fp = fopen(“stud.dat”, “w”);
do{
clrscr();
printf(“Geben Sie die Schülernummer ein “); scanf(“%d”, &sno);
printf(“Geben Sie den Schülernamen ein “); scanf(“%s”, name);
printf(“Geben Sie die Noten für 3 Fächer ein “);
scanf(“%d%d%d”, &sub1, &sub2, &sub3);
fprintf(fp, “%d %s %d %d %d\n”, sno, name, sub1, sub2, sub3);
printf(“\n\nMöchten Sie fortfahren… (j/n)”); ch = getche();
}while(toupper(ch) != ‘N’);
fclose(fp);
return 0;
} |
Schreibe ein Programm, um Daten aus einer Schülerdatendatei abzurufen.
| | / Programm zum Abrufen von Daten aus einer Schülerdatendatei /
/ 86_read.c /
#include
#include
int main()
{
int sno, sub1, sub2, sub3;
char name[10];
FILE *fp = fopen(“stud.dat”, “a+”);
clrscr();
printf(“Die Schülerdaten sind wie folgt….\n”);
do{
fscanf(fp, “%d%s%d%d%d\n”, &sno, name, &sub1, &sub2, &sub3);
printf(“%5d%15s%3d%3d%3d\n”, sno, name, sub1, sub2, sub3);
}while(!feof(fp));
fclose(fp);
return 0;
} |
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.