У меня есть ситуация, когда я прохожу через первые 64 строки файла и сохраняю каждую строку в строке. Остальная часть файла неизвестна. Это может быть одна строка или много. Я знаю, что в начале файла будет 64 строки, но я не знаю их размера.Сохранение данных файла из текущей позиции в конец файла с помощью fstream
Как сохранить всю остальную часть файла в строке?
Это то, что я в настоящее время:
std::ifstream signatureFile(fileName);
for (int i = 0; i < 64; ++i) {
std::string tempString;
//read the line
signatureFile >> tempString;
//do other processing of string
}
std::string restOfFile;
//save the rest of the file into restOfFile
Благодаря ответам это, как я получил это работает:
std::ifstream signatureFile(fileName);
for (int i = 0; i < 64; ++i) {
std::string tempString;
//read the line
//using getline prevents extra line break when reading the rest of file
std::getline(signatureFile, tempString);
//do other processing of string
}
//save the rest of the file into restOfFile
std::string restOfFile{ std::istreambuf_iterator<char>{signatureFile},
std::istreambuf_iterator<char>{} };
signatureFile.close();
Остальная часть файла может быть больше, чем размер ОЗУ, даже одна строка может превышать этот размер. Таким образом, чтобы прочитать неизвестное количество данных, используйте read + gcount – user5821508
. Вы на самом деле не читаете * строки *, вы читаете * слова *. Взгляните на ['std :: getline'] (http://en.cppreference.com/w/cpp/string/basic_string/getline). –
Спасибо! Это только спасло меня. Я получал дополнительную строку, когда использовал метод Сэма. Использование getline устраняет проблему. – Tommizzy