2016-07-11 5 views
1

Ich arbeite an einer Datenbank Flat-File-Projekt mit C-Sprache. Ich habe eine Struktur mit wenigen Mitgliedern erstellt. Ich verwende fwrite(), um sie in Binärdatei und fread() zu schreiben, um die Daten zu holen. Meine zwei große FrageWie fread() und fwrite Werke in C-Programmierung

1. können wir schreiben Struktur in Textdatei? Ich habe kein gutes Beispiel gesehen. Ist es praktisch falsch, es im Textformat zu schreiben? Wenn ich mit "w" anstelle von "wb" schreibe, bekomme ich das Textformat aber mit einigen zusätzlichen Wörtern.

2. wie diese fread() & Fwrite Werke(). Sie arbeiten an einem Datenblock, wie sie die Adresse des nächsten Blocks erhalten. Ich meine, wir haben den Zeiger, aber die Datei hat keine Adresse, also wie der Zeiger zum nächsten Block geht?

+0

, können Sie nicht lesen/schreiben binären Strukturen, wenn die Datei nicht geöffnet werden im Binär-Modus ist. Natürlich müssen Sie etwas darüber nachdenken, wie Dateisysteme funktionieren und wie OS-APIs auf das Dateisystem zugreifen. Dies liegt außerhalb des Bereichs der 'fread()'/'fwrite()' Implementierungen, die das Betriebssystem für den eigentlichen Dateizugriff delegieren. –

+0

okay danke für die Eingabe :). Sollte ich fgets/fputs verwenden? als Textformat schreiben – ekaf

+0

Wenn Sie einen wahlfreien Zugriff auf die Daten wünschen, implementieren Sie 'fread/fwrite' (aber es wird fehlzünden, wenn die Strukturen Zeiger enthalten). Wenn Sie den ganzen Datensatz einlesen, bearbeiten und die Datei neu schreiben wollen, ist der Text gut, mit 'fprintf/fgets' und' sscanf'. Daten, die als Binärdatensätze gespeichert werden, sind oft nicht übertragbar, und wenn Ihr Programm bricht, sind die gespeicherten Daten nutzlos. Während die Textdatei für Menschen lesbar ist, ist es viel einfacher, neue Funktionen zu schreiben, um die Daten in ein anderes Programm zu lesen. Ich habe an Projekten gearbeitet, bei denen der Kunde darauf bestand, dass die Datendateien auch im CSV-Format tabletkompatibel sein müssen. –

Antwort

1

1. können wir schreiben Struktur in Textdatei? Ich habe kein gutes Beispiel gesehen .ist es praktisch falsch es im Textformat zu schreiben? wenn ich mit „w“ schreiben statt „wb“ Ich bekomme das Textformat, aber mit einigen zusätzlichen Worten

Stellen Sie sich vor Ihre Struktur enthält einige ganze Zahlen. Wenn Sie sie jetzt mit fwrite schreiben, werden diese Ganzzahlen in einer Datei im Binärformat geschrieben. Wenn Sie versuchen, dies als Text zu interpretieren, wird dies nicht funktionieren, der Texteditor wird versuchen, die binären Werte als Zeichen zu interpretieren - was höchstwahrscheinlich nicht wie erwartet funktionieren wird.

z.B. wenn Ihre Struktur enthält ganze Zahl 3, geschrieben, wenn fwrite verwendet wird, wird es als

00000000 0000000 0000000 00000011 (3 in binary) 

unter der Annahme, Big-Endian-Notation gespeichert werden. Nun, wenn Sie versuchen, oben mit einem Texteditor zu lesen, erhalten Sie natürlich nicht den gewünschten Effekt.

sagt nichts über das Füllbytes, die vielleicht in Ihrer Struktur durch Compiler eingefügt.

2. wie diese fread() & fwrite funktioniert(). Sie arbeiten an einem Block von Daten, wie sie die Adresse des nächsten Blocks bekommen. Ich meine, wir haben die Zeiger, aber Datei hat keine Adresse so wie der Zeiger zum nächsten Block gehen?

Dies ist wahrscheinlich für die Verwendung von OS gesorgt.

PS. Ich schlage vor, Sie lesen mehr über die Serialisierung und versuchen, den Unterschied zwischen Text- und Binärdateien zu verstehen. Kein

+0

Betrachten Sie ein Beispiel, wo ich ein Detail eines Mitarbeiters aus einer solchen Datei holen und es für eine Berichtgeneration als Text in eine Datei schreiben will. Soll ich fread und frite verwenden, um die vollständige Struktur zu schreiben oder einzelnes Element der Struktur einzeln zu schreiben – ekaf

+0

@ ekaf verwendet fwrite/fread für Binärdaten und Textfunktionen für Textdaten. Lesen Sie mehr über Serialisierung –

+0

danke :) das hat geholfen :) – ekaf