Проблема чтения двоичного файла с помощью C - PullRequest
2 голосов
/ 09 июня 2011

У меня проблема с чтением двоичного файла в C, проблема в том, что когда я читаю файл, он не будет читать весь файл, но оставит некоторые данные из последнего ... код, используемый для чтения файла, выглядит какниже:

            FILE *file;             
            unsigned long fileLen;

            //Open file
            file = fopen("ASELogo.png", "rb");
            if (!file)
            {
                fprintf(stderr, "Unable to open file %s", name);
            }               

            fseek(file, 0, SEEK_END);
            fileLen=ftell(file);
            fseek(file, 0, SEEK_SET);

            buffer=(char *)malloc((fileLen+1)*sizeof(unsigned char));

            fread(buffer, fileLen, 1, file);

            for(int i = 0;i < fileLen;++i)
                printf("%c", ((char *)buffer)[i]);

И при печати файла он не распечатает все содержимое файла ...

Фактическое содержимое файла:

âPNG

Ответы [ 2 ]

3 голосов
/ 09 июня 2011

Вы печатаете байты как символы. Это нормально, если они оказываются в диапазоне ASCII, но вы в конечном итоге напечатаете управляющие символы и т. Д.

Попробуйте отформатировать символы в байтах (например, 0xFF и 0x12) и посмотрите, поможет ли это.

0 голосов
/ 09 июня 2011

Вы не упоминаете, сколько вы читаете, и насколько большой файл, но это, вероятно, связано с тем, что вы сравниваете подписанный int (i) с unsigned long (fileLen) если файл достаточно большой, у вас будут проблемы.

Кстати, вы выделяете char *, но используете размер unsigned char. почему это?

Редактировать

И еще одна вещь: вы не проверяете возвращаемое значение fread. Проверьте, было ли прочитано ожидаемое количество байтов, и если нет, проверьте perror. Смотрите здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...