Используя программу C, которую я пишу в Dev-C++, я хочу прочитать байтовый байтовый файл байтом. По какой-то причине чтение останавливается на 261 байт. Вот упрощенный код, который воспроизводит bavior.Файл не будет полностью прочитан byte by byte
int main(int argc, char *argv[])
{
FILE *in_fp;
char in_filename[25] = "data.raw";
in_fp = fopen(in_filename,"r");
if(in_fp == NULL) {
perror("Error while opening the input file.\n");
system("PAUSE");
exit(EXIT_FAILURE);
}
int readcnt = 0;
while (1) {
unsigned char buffer;
if (fread(&buffer, sizeof(unsigned char), 1, in_fp) == 0) {
printf("read eof after %d\n", readcnt);
break;
} else {
printf("read = %d\n", buffer);
}
readcnt++;
}
fclose(in_fp);
return 0;
}
Файл data.raw имеет размер 104 KiB.
Выход программы выше заканчивается:
...
read = 255
read = 4
read = 204
read eof after 260
Используя шестигранный-редактор, я могу найти байты ФФ 04 CC, и там должен быть байты последовали после того, как это, так как файл не конец: FF 04 CC 1A 1F C5 8A.
Я также пробовал fgetc()
и feof()
и все было по-другому.
Почему чтение останавливается со смещением 260?
Если вы на окнах и файл в текстовом режиме, '1A' == Ctrl + Z, т.е. EOF. – user657267