2015-01-20 4 views
1

Используя программу 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?

+4

Если вы на окнах и файл в текстовом режиме, '1A' == Ctrl + Z, т.е. EOF. – user657267

ответ

4

Вы, вероятно, нужно открыть файл в "binary mode":

fopen(in_filename, "rb"); 
+0

Большое спасибо за этот быстрый ответ! Это решило проблему. Я искал все время в неправильном месте. –

+0

@rinntech Упоминание 'dev-C++' сразу же вызвало «о, окна» :-) – cnicutar

Смежные вопросы