Как читать замену char с ifstream в C ++? (SUB в ASCII)

1

Мне трудно узнать, почему я не могу прочитать все символы с функцией 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, и у меня возникла аналогичная проблема. Не могли бы вы мне помочь, пожалуйста?

  • 0
    На какой операционной системе?
  • 2
    Должен быть Windows - дорогой старый control-z снова ударил.
Теги:
ascii
ifstream
substitution
getline

1 ответ

5
Лучший ответ

Вам нужно прочитать двоичный поток, а не текстовый (поскольку 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) строках?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню