我正在尝试从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 . . .
更新
是的,由于某些早期错误,该文件为空。这就是为什么会出现这个错误。
答案 0 :(得分:0)
可能你的文件没有足够的(2字节)数据。当我使用文件&gt;检查时,它给出了正确的输出2个字节。同样是空文件失败
答案 1 :(得分:0)
从man page:&#34;成功完成后,fread()将返回成功读取的元素数量 [...]。&#34;
那将是2,而不是SIZE*2
。
虽然,第二个想法,SIZE
是1,所以虽然程序容易出错,但实际上并没有错。在这种情况下,句子的第二部分适用:&#34; ...仅当遇到读取错误或文件结束时才小于nitems。&#34;。正如其他人所说,如果文件足够长,请检查全局errno
。也许现在是新SSD的时候了。