Ich habe festgestellt, dass mit .rdbuf()
auf einem ifstream
scheint es irgendwie zu ändern. Der folgende Code sollte das Problem zeigen.Weird Verhalten mit ifstreams und rdbuf()
#include <fstream>
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
ifstream ifs("Sample.csv");
cout << "Reading buffer: " << endl;
cout << ifs.rdbuf(); // Outputs buffer as expected
cout << "Reading buffer again: " << endl;
cout << ifs.rdbuf(); // Returns nothing
return 0;
}
Der Grund, warum dies stört mich ist, dass ich zur Zeit versucht, den Inhalt einer Textdatei in eine andere ofstream ofs; ofs << ifs.rdbuf()
mit zu kopieren. Das funktioniert gut, aber das Lesen von ifs
unter Verwendung von getline(ifs, str)
schlägt fehl und "bricht" effektiv den Stream.
Was ist das Problem? Du hast schon alles aus einer Datei gelesen, warum erwartest du etwas zu lesen? –
Sie müssten die Datei zurückspulen, weil Sie den Stream mit Ihrem Aufruf verbraucht haben: Fügen Sie 'ifs.seekg (0);' zwischen den Aufrufen ein. –
Antwortabschnitt ist unten. –