C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Streamstatus, Fehlerzustand und clear()

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Ernst Baumann
Guest





PostPosted: Thu Nov 23, 2006 12:03 am    Post subject: Streamstatus, Fehlerzustand und clear() Reply with quote



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





PostPosted: Fri Nov 24, 2006 2:34 am    Post subject: Re: Streamstatus, Fehlerzustand und clear() Reply with quote



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





PostPosted: Fri Nov 24, 2006 7:30 pm    Post subject: Re: Streamstatus, Fehlerzustand und clear() Reply with quote



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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.