高清AVI格式转YUV时,fread()突然报错~但绝没有读到文件尾部解决办法

高清AVI格式转YUV时,fread()突然报错~~但绝没有读到文件尾部
本人做一个高清视频(4G左右)转YUV,一共是500帧,转完YUV播放后,只有389帧,少了100多帧,调试中发现是在


while(fread(type,4,1,sourcefile))//读取4字节类型,读取到的


long m_telllong=ftell(sourcefile);//p

if((type[0]=='J'&&type[1]=='U'&&type[2]=='N'&&type[3]=='K') ||(type[2]=='w'&&type[3]=='b'))//判断是否为junk
{
fread(data,4,1,sourcefile);//是junk,读取大小,
size = data[0] + data[1]*256 + data[2]*65536 + data[3]*16777216; 
fseek(sourcefile,size,SEEK_CUR);//跳过大小
continue;
}

//进入数据部分,
if(type[2]=='d'&&type[3]=='b')//进入图像部分
{
frame++;
if ((yuvfile = fopen(m_YUVFile,"a")) == NULL) //ab表示以二进制的形式写入
{
printf("yuv file failed!\n\n");
exit(0);
}

memset(Y,0,width*height);
memset(U,0,width*height/2);
memset(V,0,width*height/2);
memset(Bits,0,width*height/6*16);

pY = Y;
pU = U;
pV = V;
pBits = Bits;

m_telllong=ftell(sourcefile);//p


fread(data,4,1,sourcefile);//读取该帧的大小
size = data[0] + data[1]*256 + data[2]*65536 + data[3]*16777216;
int x = fread(Bits,1,size,sourcefile);
//在389帧时,此处X返回为0!!!!!!!!!!!!!!!!!!!!!!!!!!
//但是此处的size大小和以前的帧数据大小相同都是5529600,
//同时我用UltraEdit。32k查看了对应地址,可以肯定的是,还没有读取到末尾
//因为此时m_telllong=2 147 295 528,刚好指到"00db"接下来是数据大小“00 60 54 00”即5 529 600,而总文件大小// //2 767 141 704,故还未触及到末尾,但为什么int x = fread(Bits,1,size,sourcefile);会返回0了?????
//求大神解释!

m_telllong=ftell(sourcefile);//p
。。。。。。。。。
。。。。。。。。
。。。。。。。。

------解决方案--------------------
Bits够大吗?
------解决方案--------------------
文件怎么开启的?文本还是二进制。
------解决方案--------------------
fseek(sourcefile,size,SEEK_CUR);//跳过大小
是不是junk大小有问题,seek多了?