Probleme mit fstream oder << >>

sisela

Erfahrenes Mitglied
Hallo,
folgender Code verursacht bei mir ein kleines Durcheinander. Vielleicht kann mir einer das Erklären.

Der Funktion wird ein Stream FS übergeben. Dann wird die Datei files.dat geöffnet und Zeichen für Zeichen herausgeholt und in eine andere Datei gespeichert (mittel FS.put(c)), dass solange bis mein Trennzeichen ; kommt. Funktioniert alles super bis jetzt.
Wenn ich aber nun nach dem Trennzeichen etwas einfügen will, wird überhaupt nix in die Datei geschrieben.
Mit Kommentar (/* ... */): Die eine Datei wird in die andere geschrieben.
Ohne Kommentar: kompiliert zwar aber in der (FS) Datei steht gar nichts.

Für mich total unklar.


Code:
void CFile::read_fileline(fstream &FS) {

FILE* in;
char c;
char s[100];

	in = fopen("files.dat", "r");
	do{
		c = fgetc(in);
		FS.put(c);
		cout << c;
	/*	if (c == ';') {
			cout << " Bitte Text eingeben: ";
			cin >> s;
			do {
				int i=0;
				c = s[i++];
				FS.put(c);
			}while(c = '\0');
		}
	*/
	}while (c != EOF);
	FS.close();
}

Vielen Dank schon mal
mfg Christian

Mit nichts ist man freigiebiger als mit Ratschlägen
 
Code:
void CFile::read_fileline(fstream &FS) {

FILE* in;
char c;
char s[100];

	in = fopen("files.dat", "r");
	do{
		c = fgetc(in);
		FS.put(c); 
		cout << c;
/*		if (c == ';') {
			int i=0;
			char k;
			cout << " Bitte Album eingeben: ";
			cin >> s;
			do {
				k = s[i++];
				//FS.put(k);
				FS >> k; 
			}while(k != '\0');
		}
*/	
	}while (c != EOF);

Da war noch ein Fehler in der Schleife aber ansonsten gehts trotzdem nicht. Die Ausgabe auf den Bildschirm passiert auch erst sehr verspätet.

hat das irgendwas mit der Pufferung zu tun.

Versteh ich alles nicht...

PLEASE HELP ME...
 
Zuletzt bearbeitet:
Manchmal lösen sich Probleme von selbst.

Code:
void CFile::read_fileline(fstream &FS) {

FILE* in;
char c;

	in = fopen("files.dat", "r");
	do{
		c = fgetc(in);
		FS << c;
		FS.flush();
		cout << c;
		if (c == ';') {
			cout << " Bitte Text eingeben: ";
			cin >> s;
			FS << s;
		}
	}while (c != EOF);
}

Ein einfache FS.flush() hats gebracht.

Falls mir aber einer Erklären kann warum, das mit dem Puffer so ist wie es ist, wäre ich dankbar.

Stille ist der Zustand der eintreten würde, wenn die Menschen nur noch von Dingen sprächen, von denen sie etwas verstehen.
 
Was mir noch zu deinem Code einfiel: Warum verwendest du neben der C++-Standardfilestreams auch noch die guten alten C-Filefunktionen wie fopen()? Ist so eine komische Mischung...
 
Zurück