проблема с фридом

я пытаюсь читать по одному байту из файла:

size_t result_new = 1;  
char buf6[1];  
if( (result_new = fread(buf6, 1, 1, pFile)) != 1)  
            {  
                printf("result_new = %d\n", result_new);
                printf("Error reading file\n");
                exit(1);
            }

result_new становится 0 и печатает ошибку. любая идея, что может быть неправильным. Я уверен, что pFile в порядке.

Благодарность


person user000    schedule 28.01.2011    source источник
comment
Я бы посоветовал вам использовать буфер размером 2 байта, а затем попытаться прочитать один байт из файла.   -  person programmer    schedule 28.01.2011
comment
@Ashwini, не хочешь объяснить, почему?   -  person bdonlan    schedule 28.01.2011


Ответы (4)


Согласно документации:

fread() и fwrite() возвращают количество успешно прочитанных или записанных элементов (т. е. не количество символов). Если возникает ошибка или достигается конец файла, возвращаемое значение представляет собой счетчик коротких элементов (или ноль).

Так почему бы вам не проверить код ошибки, который ответит на ваш вопрос? Вы можете использовать, например, perror.

person Community    schedule 28.01.2011

Если вам нужен только один байт, getc будет гораздо лучшим выбором, чем fread. Интерфейс проще и, вероятно, будет намного быстрее.

person R.. GitHub STOP HELPING ICE    schedule 28.01.2011
comment
+1, но вы должны предпочесть fgetc getc, так как последний может быть реализован как макрос, который оценивает свой параметр FILE* более одного раза. - person Adam Rosenfield; 29.01.2011
comment
@Adam: Таким образом, getc может быть заметно быстрее. Единственный аргумент имеет тип FILE *, поэтому, если вы не передаете возвращаемое значение функции, которая возвращает FILE * или что-то вроде files[i++], количество вычислений аргумента, вероятно, не имеет значения. Такое использование кажется мне довольно редким и патологическим. - person R.. GitHub STOP HELPING ICE; 29.01.2011

http://www.cplusplus.com/reference/clibrary/cstdio/fread/ есть пример с чтением из файла. Это страница c++, но она должна работать на c.

person Mike    schedule 28.01.2011

Имейте в виду, что при использовании fread и fwrite в некоторых случаях могут возникать странные ошибки, когда файл открывается для обычного ввода текста. Открытие файла для двоичного кода устранит эту потенциальную проблему. В основном это связано с «новыми строками», которые по какой-то причине различаются при чтении и записи двоичных и текстовых файлов.

person Codesmith    schedule 29.01.2011