PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit OutputFileStream


Asmodeus
2006-02-13, 10:03:03
Ich öffne eine ofstream Datei im Raw Modus, dabei sind die Flags ios::out und ios::trunc ja standardmäßig gesetzt. Nun möchte ich nach einem Test, ob die Datei bereits exisitert die Datei jedoch nicht überschreiben, sondern weitere Daten in die Datei hinzufügen. Dafür öffne ich die Datei mit ios::app. Damit ist es aber leider nur möglich, wirklich nur am Dateiende weitere Daten einzufügen. Ich möchte aber auch in dem Bereich der Datei, der schon existiert, Daten überschreiben. Wie muss ich dabei vorgehen?

Gruss, Carsten.

Imperator Katarn
2006-02-13, 10:36:58
ich würde darauf tippen, daß du dazu mit dem File Pointer arbeiten mußt. Die Datei mit ios::out öffnen, um Schreibberechtigung für den schon vorhandenen Dateibereich zu erhalten, und dann den Pointer an die gewünschte Stelle bewegen.

Allerdings ohne Gewähr...

Asmodeus
2006-02-13, 10:48:15
Das Problem ist leider etwas komplizierter, und ich bin ziemlich ratlos. Ios::out wird bei ofstream Objekten standardmäßig gesetzt, genauso wie ios::trunc. Um ios::trunc zu umgehen (zu "deaktivieren") kann man ios::app verwenden, jedoch mit dem von mir beschriebenen Problem. Wenn ich nun ios::ate anstatt von ios::app verwende (was laut Definition genau die Funktionalität zur Verfügung stellt, die ich benötige), dann funktioniert die Sache leider nicht, da ios:ate nicht verhindert, dass ios:trunc trotzdem standardmäßig aktiv ist. Und meiner Meinung nach macht es überhaupt keinen Sinn, dass ios::ate ios::trunc nicht deaktiviert, denn so bald ios::trunc aktiv ist, dann ist nach meinem Verständnis ios::ate sowieso obsolet, da dann ja Dateiende gleich Dateianfang ist. Also müsste nach meinem Verständnis ios:ate genauso wie ios:app, ios::trunc "deaktivieren". Leider scheint das nicht so zu sein.

Gruss, Carsten.

Trap
2006-02-13, 13:25:17
Du brauchst
ios::in || ios::out || ios::binary
als Flags.

in verhindert das Löschen des Inhalts.

Asmodeus
2006-02-13, 15:40:17
Du brauchst
ios::in || ios::out || ios::binary
als Flags.

in verhindert das Löschen des Inhalts.

Jepp, ios::in hat es gebracht. Bin bisher irgendwie immer davon ausgegangen, dass ein ios::in bei einem ofstream nix zu suchen hat. ;)

Gruss, Carsten.