无法正确读取bmp文件

时间:2016-10-17 09:40:18

标签: c++ file

我正在尝试从bmp文件中读取某些信息。基本上是文件类型,即我的bmp文件中的B M.我首先打开文件。这是正确发生的。然而,第一个恐惧是失败的。为什么会这样?

#include<stdio.h>
#include<string.h>

#define SIZE 1

int main(void)
{
    FILE* fd = NULL;
    char buff[2];
   unsigned int i=0,size=0,offset=0;
    memset(buff,0,sizeof(buff));

    fd = fopen("RIT.bmp","r+");

    if(NULL == fd)
    {
        printf("\n fopen() Error!!!\n");
        return 1;
    }

    printf("\n File opened successfully\n");

    if(SIZE*2 != fread(buff,SIZE,2,fd))//to read the file type.(i. e. B M)
    {
        printf("\n first fread() failed\n");
        return 1;
    }
    return 0;
}

输出

 File opened successfully

 first fread() failed
Press any key to continue . . .

更新

是的,由于某些早期错误,该文件为空。这就是为什么会出现这个错误。

2 个答案:

答案 0 :(得分:0)

可能你的文件没有足够的(2字节)数据。当我使用文件&gt;检查时,它给出了正确的输出2个字节。同样是空文件失败

答案 1 :(得分:0)

man page:&#34;成功完成后,fread()将返回成功读取的元素数量 [...]。&#34;

那将是2,而不是SIZE*2

虽然,第二个想法,SIZE是1,所以虽然程序容易出错,但实际上并没有错。在这种情况下,句子的第二部分适用:&#34; ...仅当遇到读取错误或文件结束时才小于nitems。&#34;。正如其他人所说,如果文件足够长,请检查全局errno。也许现在是新SSD的时候了。