百思不得其解,只是按二进制读取,然后写入新文件中,为什么新文件多除了240个字节?
这个程序是读取二进制文件,然后再写入新文件,但是现在新文件中结尾多了240个字节的0,不知什么原因。int main(int argc, char *argv[])
{
FILE *segy_in; /*输入segy数据指针*/
FILE *segy_out; /*输出segy文件指针*/
unsigned char temp; /*作为临时变量*/
int samp_code=0; /*数据格式码*/
int samp_num=0; /*每道的采样点数*/
long int cc=0;
long int dd=0;
float aaa[10000]={0.0}; /*临时存储样点值*/
unsigned char a,b,c,d;
int i=0;
int j=0;
int k=0;
segy_out=fopen("d:\\5937ff.sgy","wb");
if((segy_in=fopen("d:\\5937-ffid2.sgy","rb"))==NULL)
{
printf("cant open the file");
return 0;
}
/*1. 跳过3224字节卷头*/
for(i=0;i<3224;i++)
{
cc=cc+fread(&temp,1,1,segy_in); /*循环3224次,每次读入1个字节,读完卷头*/
dd=dd+fwrite(&temp,1,1,segy_out);
}
/**/
cc=cc+fread(&temp,1,1,segy_in);
samp_code = temp;
dd=dd+fwrite(&temp,1,1,segy_out);
cc=cc+fread(&temp,1,1,segy_in);
samp_code = samp_code*16*16+temp;
dd=dd+write(&temp,1,1,segy_out);
if(samp_code!=1) printf("本程序只支持promax输出的32位IBM浮点数,不支持别的编码格式。"); /* 1=4字节IBM浮点数 */
/*跳到第一道的道头位置*/
for(i=0;i<374;i++)
{
cc=cc+fread(&temp,1,1,segy_in);
dd=dd+fwrite(&temp,1,1,segy_out);
}
/*以上读完了卷头,现在指针在第一道道头位置*/
while(!feof(segy_in)) /*循环读取,直到文件指针指向文件结尾*/
{
/*跳过114 字节的道头,指针指向本道的样点数*/
for(i=0;i<114;i++)
{
cc=cc+fread(&temp,1,1,segy_in);
dd=dd+fwrite(&temp,1,1,segy_out);
}
cc=cc+fread(&temp,1,1,segy_in);
samp_num=temp;
dd=dd+fwrite(&temp,1,1,segy_out);
cc=cc+fread(&temp,1,1,segy_in);
samp_num=samp_num*16*16+temp; /*********这个数据非常重要**********/
/* printf("sample_number=%d\n",samp_num);*/
dd=dd+fwrite(&temp,1,1,segy_out);
/*再读124个字节,读完本道道头*/
for(i=0;i<124;i++)
{
cc=cc+fread(&temp,1,1,segy_in);
dd=dd+fwrite(&temp,1,1,segy_out);
}
/* 下面该读IBM32位浮点数了。*/
for(i=0;i<samp_num;i++) /*挨个读取样点值,并存入数组aaa[]中*/
{
fread(&a,1,1,segy_in);
fread(&b,1,1,segy_in);
fread(&c,1,1,segy_in);
fread(&d,1,1,segy_in);
fwrite(&a,1,1,segy_out);
fwrite(&b,1,1,segy_out);
fwrite(&c,1,1,segy_out);
fwrite(&d,1,1,segy_out);
}
}
fclose(segy_in);
fclose(segy_out);
return 0;
}