etwas in eine Datei schreiben

also ich habs jetzt immer mit

Code:
fprintf()

gemacht! Aber achtung auch im schreibmodus öffnen die datei!

sebi
 
Hallo,

mit fprintf() kannst du formatiert in die Datei schreiben:
fprintf(*stream, "%d", zahl);

Die Funktion fprintf benötigt 3 Parameter, und zwar
-*stream - Angabe des Filepointers
-%d - irgendwelche Formatstrings wie %d, %f, %c, aber auch \n oder \t erlaubt
- zahl - die zum Formatstring gehörigen Variablen
(wie du siehst, im Prinzip ein normales printf(), nur mit der Angabe des Filepointers!

Es gäbe auch noch die Funktion fwrite(), aber die ist etwas schwieriger, mehr dazu unter diesem Link.

Ich würd dir aber fprintf() empfehlen, da damit die Dateien schöner formatiert werden können!

lg D;-]c
 
Formatstrings sind sog. Platzhalter für bestimmte Variablentypen
Integer - %d
Float - %f
Char - %c
Double - %lf
Strings - %s
...

Ich hoffe das ist einigermaßen verständlich,

lg D;-]c
 
wenn ich in die Datei etwas neues schreibe dan wird das alte überschrieben. Geht es vielleicht auc das die Datei einfach weitergeführt wird und nicht einfach überschrieben wird?
 
Code:
size_t fread(void *ptr, size_t size, size_t n, FILE *stream);

Du liest size*n Bytes aus der Datei die du zuvor geöffnet hast (stream) und speicherst die eingelesenen Daten an der Adresse, auf die ptr zeigt (Speicher zuvor reservieren, das macht fread nicht!).
 
fwrite/fread schreibt/liest vor allem so ziemlich direkt in eine Datei, d. h. unformatiert. Öffnet man eine formatiert geschriebene Datei (fprintf) z. B. mit Notepad, kann man alles im Klartext lesen, bei einer unformatierten (fread) eben nicht. Beispielsweise werden Zahlen nicht in Text konvertiert und sehen dann in einem Texteditor entsprechend geschrottet aus.

Mal ein Beispiel, wo noch nicht geschrottet wird:

Code:
FILE *f;
f = fopen("C:\\file.txt", "w+");

int x = 0x44434241;

// so, hier wird erstmal die Adresse der Variablen übergeben,
// dann die Größe der Variablen (sizeof (variable)),
// dann die Anzahl, wie oft geschrieben werden soll,
// dann die Datei
fwrite (&x, sizeof (x), 1, f);

fclose (f);

Wenn du jetzt in die Datei lunst, siehst du (was ein Zufall) 'ABCD', denn die Variable mit Hex 0x44434241 sieht binär in etwa so aus (hoffe ich)...
Code:
01000001  01000010  01000011  01000100
---65---  ---66---  ---67---  ---68---

Und 65, 66, 67, 68 im ASCII macht 'ABCD'. Der Texteditor versteht ASCII ganz gut und zeigt entsprechend diese Buchstaben an.
Nimmst du jetzt mal irgendeine andere Zahl für x, sieht du eben höchstwahrscheinlich Schrott, weil das im Editor als Text interpretiert wird, was in diesem Fall natürlich schwachsinning ist, da die Variable (4 Bytes) ja direkt in der Datei steht, nicht als String. Es werden also mehr oder weniger unvorhersehbar Zeichen aus dem ASCII-Code ausgespuckt.

Zum Lesen also fread verwenden, ganz analog zu fwrite. Der Wert wird direkt aus der Datei ohne jegliche Konvertierung in eine Variable geschrieben.

fwrite/fread also wirklich nur zum Speichern von Dateien, die das eigene Programm verwalten soll.
fprintf etc. dann für echte "Ausgaben", die man extern lesen kann.

(Alles mit Vorbehalt) :-)

MfG
randomize
 
Zuletzt bearbeitet:
Zurück