Мне трудно узнать, почему я не могу прочитать все символы с функцией fstream get. Мой код следующий:
ifstream input_stream(input_filename.c_str(), ios::in);
string input;
if(input_stream)
{
char character;
while(input_stream.get(character))
{
input += character;
}
input_stream.close();
}
else
cerr << "Error" << endl;
Немного проверив, я обнаружил, что у меня возникает проблема, когда character = 26 (SUB в ASCII), потому что input_stream.get(26) возвращает false, и я выхожу из своего цикла while. Я хотел бы поместить в свою строку ввод всех символов из файла, включая SUB. Сначала я попытался с функцией getline, и у меня возникла аналогичная проблема. Не могли бы вы мне помочь, пожалуйста?
Вам нужно прочитать двоичный поток, а не текстовый (поскольку SUB, то есть '0x1a'
(то есть 26), является управляющим символом в ASCII или UTF8, а не печатаемым). Используйте ios :: binary во время открытия:
ifstream input_stream(input_filename.c_str(), ios::in | ios::binary);
Может быть, вы
do {
int c= input_stream.get();
if (c==std::char_traits::eof()) break;
input += (char)c;
} while (!input_stream.fail());
Считаете ли вы, что std :: getline читает целую строку, предполагая, что входной файл все еще организован в ('\n'
terminated) строках?