006
15.12.2004, 21:15 Uhr
(un)wissender
Niveauwart
|
Das ist ja Dreck hoch zehn, du hast recht. Sobald eof gelesen wird, wird das failbit gesetzt. Was soll das? Das ist doch kein Fehler, da man eof immer lesen muss!
Das hier tut endlich, was es soll...allerdings wird entweder EOF nie erreicht oder es wird keine Exception geworfen, vielleicht weil das failbit zusammen mit eofbit in diesem Fall doch nicht gesetzt wird. Versteh das einer, ich nicht!
C++: |
#include <stdexcept> #include <iostream> #include <fstream> #include <string>
int main() { //Datei std::fstream io("test.txt", std::ios::in | std::ios::out | std::ios::binary);
//Immer Ausnahme auslösen io.exceptions(std::ios::failbit|std::ios::badbit); //Hier schreiben wir rein std::string buffer; try { std::size_t pos = 0; const std::size_t FILE_SIZE = io.seekg(0, std::ios::end).tellg(); io.seekg(0, std::ios::beg); //Solange Datei nicht ganz gelesen ist... while(!io.eof() && pos < FILE_SIZE) { //An aktuelle Einleseposition setzen. std::istream& in = io.seekg(pos, std::ios::beg); //Vor dem Lesen merken, wo wir waren. const std::size_t beforeRead = pos; //Lesen std::getline(in, buffer); //Was haben wir gelesen? std::cout << "Read: " << buffer << std::endl; //Neue Position merken pos = in.tellg();
//Zur Kontrolle ausgeben std::cout << "pos: " << pos << std::endl;
//Nun die Ausgabe, wir wollen das wieder schreiben, was wir gelesen haben. std::ios::iostate state = io.rdstate(); io.clear();
std::ostream& out = io.seekp(beforeRead, std::ios::beg); //Schreiben out << buffer; //Was haben wir geschreiben? std::cout << "Wrote: " << buffer << std::endl; io.setstate(state); } } catch(std::exception& e) { //Was ist schief gelaufen? std::cout << e.what()<< std::endl; } //Stream schließen. io.close(); }
|
-- Wer früher stirbt ist länger tot. |