Мне трудно понять, почему я не могу прочитать все символы с помощью функции 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;
Проведя небольшое тестирование, я обнаружил, что у меня возникает проблема, когда символ = 26 (SUB в ASCII), потому что input_stream.get (26) возвращает false, и я выхожу из цикла while.
Я хотел бы вставить в строку ввода все символы из файла, включая SUB.
Сначала я попробовал использовать функцию getline, и у меня возникла похожая проблема.
Не могли бы вы мне помочь, пожалуйста ?
Вам необходимо прочитать двоичный поток, а не текстовый (так как SUB то есть '0x1a'
(то есть 26) является управляющим символом в ASCII или UTF8, а не для печати) ИОС :: бинарными во время открытия:
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());
Вы рассматривали возможность использования станд :: GetLine читать всю строку, предполагая, что входной файл все еще организован в ('\n'
прекращено) линии?
Других решений пока нет …