 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Ernst Baumann Guest
|
Posted: Thu Nov 23, 2006 12:03 am Post subject: Streamstatus, Fehlerzustand und clear() |
|
|
Hallo allerseits,
bin gerade noch am experimntieren mit Dateien.
Mit dem folgenden Programmauschnitt kann man eine Datei Byte für Byte
auslesen und z.B. einen Bindestrich durch einen Doppelpunkt ersetzen.
....
while(mydatei.read(&mychar,1)){
if(mychar=='-'){
mydatei.seekg(-1, ios::cur);
mydatei.write(":",1);
mydatei.seekg(0, ios::cur);
}
}
....
Annahme: Das letzte Byte in der Datei ist ein Bindestrich.
Das Programm macht auch das Gewünschte. Eigentlich wunderbar...
Bloß verstehe ich _nicht_, warum das Programm das letzte Byte, also
den Bindestrich durch einen Doppelpunkt ersetzt.
Denn:
Wenn das Programm das letzte Byte ausliest, wird der Dateizeiger auf
das Dateiende gesetzt (also eofbit = 1 gesetzt).
Dann ist die Datei also in einem _Fehlerzustand_
Ein Fehlerzustand bedeutet aber, dass alle weiteren Methoden die in
meiner if-Verzweigung sind zwar aufegrufen werden, aber dass die
Dateizugriffe nicht mehr gemacht, also ignoriert werden (doch sie
werden gemacht...)
Diese Dateizugriffe werden dann später nur noch gemacht, wenn man den
Streamstatus mit clear wieder zurücksetzt (was hier nicht passiert).
Was ist an meiner Überlegung falsch?
mfg
Ernst |
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Fri Nov 24, 2006 2:34 am Post subject: Re: Streamstatus, Fehlerzustand und clear() |
|
|
Ernst Baumann <carlox (AT) web (DOT) de> writes:
| Quote: | Wenn das Programm das letzte Byte ausliest, wird der Dateizeiger auf
das Dateiende gesetzt (also eofbit = 1 gesetzt). Dann ist die Datei
also in einem _Fehlerzustand_
|
Nein. Das passiert erst beim Versuch, *übers Ende hinaus* zu lesen. |
|
| Back to top |
|
 |
Ernst Baumann Guest
|
Posted: Fri Nov 24, 2006 7:30 pm Post subject: Re: Streamstatus, Fehlerzustand und clear() |
|
|
| Quote: |
Wenn das Programm das letzte Byte ausliest, wird der Dateizeiger auf
das Dateiende gesetzt (also eofbit = 1 gesetzt). Dann ist die Datei
also in einem _Fehlerzustand_
Nein. Das passiert erst beim Versuch, *übers Ende hinaus* zu lesen.
Was passiert beim versuchten Zugriff (wie z.B. lesen, schreiben, |
Dateizeiger verschieben) auf eine Datei:
Fall 1:
Wenn good() false zurückliefert (d.h. mindestens eines der 3
Fehlerbits eofbit, failbit, badbit ist auf 1 gesetzt), wird erst gar
kein Dateizugriff (wie z.B. lesen, schreiben, Dateizeiger verschieben)
gemacht, sondern failbit = 1 gesetzt.
Fall 2:
Wenn good() true zurückliefert, gibt es 2 Fälle:
a) Dateizeiger wird durch einen Dateizugriff (wie z.B. lesen,
schreiben, Dateizeiger verschieben) maximal bis EOF verschoben (d.h.
es wird z.B. im schlimmsten Fall das letzte Byte ausgelesen und damit
der Dateizeiger auf EOF verschoben). Dann hat man noch keinen Fehler,
es ist alles ok.
b)Dateizeiger wird durch einen Dateizugriff (wie z.B. lesen,
schreiben, Dateizeiger verschieben) über EOF hinaus verschoben (d.h.
z.B. dass der Dateizeiger auf EOF steht und nun etwas ausgelesen
wird).
Was passiert dann?
Ich vermute, dass dann auf jeden Fall eofbit = 1 _und_ failbit = 1
gesetzt wird.
Ist das alles richtig?
mfg
Ernst |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|