二进制文件数据修改问题?
修改一段老程序。
文件写入没问题,修改有问题,但不知出在哪?
代码如下:
void SvRcd0(void) //存文件,测试没有问题
{
int i,l;
unsigned char pw[6][8],ttt[10],pw0[12][8];
char flnm[10];
struct tm Crt;
Crt.tm_year=atoi(year)-1900;
Crt.tm_mon=atoi(mon)-1;
Crt.tm_mday=atoi(day);
sprintf(flnm,"%d%d",Crt.tm_year,Crt.tm_mon);//年月
if( (fp=fopen(flnm,"ab")) == NULL )
printf("Record File Error!!!");
else {
for(int jj=0;jj<6;jj++)
for(int kk=0;kk<24;kk++)
{
Crt.tm_hour=jj*4+kk/6; //小时
Crt.tm_min=(kk%6)*10; //10分钟
Crt.tm_sec=0;
CrtTm2 = mktime(&Crt);
sprintf(pw[0],"%2.2f",OpH[0][jj][kk]);
sprintf(pw[1],"%2.2f",OpH[1][jj][kk]);
sprintf(pw[2],"%2.2f",OpH[2][jj][kk]);
sprintf(pw[3],"%2.2f",OpH[3][jj][kk]);
sprintf(pw[4],"%2.2f",OpH[4][jj][kk]);
sprintf(pw[5],"%2.2f",OpH[5][jj][kk]);
fwrite(&CrtTm2,sizeof(long),1,fp);//写时间
for(i=0;i<6;i++)
{fwrite(pw[i],sizeof(pw[i]),1,fp);//写数据
}
}
fclose(fp);
}
}
void SvRcd1(void)//改写历史数据,有问题
{
int i,l;
unsigned char pw[6][8],ttt[10],pw0[12][8];
char flnm[10];
struct tm *Crt;
Crt->tm_year=atoi(year)-1900;
Crt->tm_mon=atoi(mon)-1;
Crt->tm_mday=atoi(day);
sprintf(flnm,"%d%d",Crt->tm_year,Crt->tm_mon);
if( (fp=fopen(flnm,"wb+")) == NULL )
printf("Record File Error!!!");
else {
long curpos;
curpos = ftell(fp);
fseek(fp, 0L, SEEK_END);
fseek(fp, curpos, SEEK_SET);
for(int jj=0;jj<6;jj++)
for(int kk=0;kk<24;kk++)
{
Crt->tm_hour=jj*4+kk/6;
Crt->tm_min=(kk%6)*10;
Crt->tm_sec=0;
CrtTm2 = mktime(Crt);
sprintf(pw[0],"%2.2f",OpH[0][jj][kk]);
sprintf(pw[1],"%2.2f",OpH[1][jj][kk]);
sprintf(pw[2],"%2.2f",OpH[2][jj][kk]);
sprintf(pw[3],"%2.2f",OpH[3][jj][kk]);
sprintf(pw[4],"%2.2f",OpH[4][jj][kk]);
sprintf(pw[5],"%2.2f",OpH[5][jj][kk]);
do{
long rtm;
char ntm[80];
struct tm srtm;
fread(&rtm,1,sizeof(long),fp); //读时间
if(abs(rtm-CrtTm2)<10)
{
for(i=0;i<6;i++)
{fwrite(pw[i],sizeof(pw[i]),1,fp);//时间后的数据改写
}
}
else {
fread(&ntm,1,48,fp);
}
}while(!feof(fp));
}
fclose(fp);
}
}