ifstream::read не работает в ASCII 26

Эта проблема мучает меня давно. Например, код

ifstream in;
char temp;
int a;

in.open ("Random.txt");

for (a = 0;a < 10000;a++)
    in.read (&temp, 1);

in.close ();

работает нормально, пока ifstream не встретит замещающий символ (ASCII = 26). Затем для всех следующих символов ifstream::read дает мне temp = -1. Я действительно не хочу, чтобы это произошло, но вместо этого хочу, чтобы он продолжал читать символы из файла вместо -1. Что я сделал не так?


person GILGAMESH    schedule 22.06.2012    source источник
comment
Не ответ, а комментарий... Разве 26 не является символом ASCII для конца файла (EOF)? Я бы посмотрел на время выполнения.   -  person Joseph Willcoxson    schedule 23.06.2012
comment
да... я совсем забыл об этом. Но моя программа считывает данные, которые содержат все виды данных, поэтому это НЕ ДЕЙСТВИТЕЛЬНО конец файла, когда я читаю в 26.   -  person GILGAMESH    schedule 23.06.2012


Ответы (1)


Вам нужно открыть поток в двоичном режиме. По историческим причинам текстовый режим в Windows будет рассматривать Control-Z (ASCII 26) как конец файла.

Подробнее см. в моем более раннем ответе.

person Mark Ransom    schedule 22.06.2012
comment
Да, это решило мою проблему! Спасибо. Я не могу принять ваш ответ сейчас, но сделаю это через 7 минут, когда SO позволит мне. - person GILGAMESH; 23.06.2012