使用C读取二进制文件时出现问题

时间:2011-06-09 09:42:09

标签: c

我在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]);

当打印文件时,它不会打印文件的全部内容......

实际文件内容为:

APNG

2 个答案:

答案 0 :(得分:3)

您将字节打印为字符。如果它们恰好是ASCII范围,那就没问题,但是你最终会打印控制字符等等。

尝试将字符格式化为字节(例如0xFF和0x12),看看是否有帮助。

答案 1 :(得分:0)

你没有提到你读了多少,文件有多大,但这可能与你将 signed int (i)与 unsigned long (fileLen)如果文件足够大,你就会遇到麻烦。

顺便说一句,您分配给char *,但使用无符号字符的大小。那是为什么?

修改

还有一件事:你没有检查fread的返回值。检查是否已读取预期的字节数,如果没有,请检查perror。请参阅here