Вы открываете файл в двоичном режиме. Операторы извлечения предназначались для использования с текстовыми файлами. Просто оставьте флаг std::ios::binary
, чтобы открыть файл в текстовом режиме.
Если у вас действительно есть двоичный файл, используйте вместо него функцию read()
.
Редактировать : Я тоже это проверял, и действительно, похоже, работает. Я получил это от CPlusPlus.com , где написано:
В двоичных файлах ввод и вывод данных с помощью операторов извлечения и вставки (<< и >>) и таких функций, как getline, неэффективен, поскольку нам не нужно форматировать какие-либо данные, и данные могут не использовать разделение коды, используемые текстовыми файлами для разделения элементов (например, пробел, символ новой строки и т. д.).
Вместе с описанием ios::binary
, в котором просто говорится «Рассматривайте поток как двоичный, а не текстовый текст», я совершенно запутался. Этот ответ превращается в собственный вопрос ...