Я заметил, что использование .rdbuf()
на ifstream
похоже каким-то образом изменило его. Следующий код должен показать проблему.Странное поведение с ifstreams и 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;
}
Причина это беспокоит меня, что я в настоящее время пытается скопировать содержимое одного текстового файла в другой с помощью ofstream ofs; ofs << ifs.rdbuf()
. Это отлично работает, но делает чтение с ifs
с использованием getline(ifs, str)
неудачным, эффективно «разбивая» поток.
В чем проблема? Вы уже все прочитали из файла, почему вы ожидаете, что что-то останется читать? –
вам потребуется перемотать файл, потому что вы потребляли поток с помощью своего вызова: вставьте 'ifs.seekg (0);' между вызовами. –
Раздел ответов приведен ниже. –