📄 fileio.cpp
字号:
// fclose(fp);
//remove(FileName);
break;
}
}
if(RainFileHead.start2_report>(RainFileHead.end_report-RAINFALL_REC)) //没有需要发送的数据
{
fclose(fp);
return -2;
}
for(j=0; j<6; j++)
OutRainfallregdata.time[j] = regdata.time[j];
strcpy(OutRainfallregdata.rainfall, regdata.rainfall);
OutRainfallregdata.type_of_Ivtime = regdata.type_of_Ivtime;
OutRainfallregdata.datatype = regdata.datatype;
RainFileHead.start2_report+=RAINFALL_REC;
fseek(fp, 8, 0);
fwrite(&RainFileHead.start2_report,4,1,fp);
}
}
else /*非法文件*/
{
fclose(fp);
remove(FileName);
if(GetKPState==LOCK) printf("remove %s file!\n", FileName);
return -2;
}
fclose(fp); /*关闭文件*/
return 0;
}
//读记录的历史水位数据
long WPosition=14;
int ReadOldWaterLevelData( char *FileName, char *StartQueryTime,char *EndQueryTime )
{
int j;
static FILE *fp = NULL;
WATERLEVELDATA regdata;
if(fp!=NULL) fclose(fp);
if((fp=fopen(FileName,"rb"))==NULL) /*以只读方式打开一个二进制文件*/
{
if(GetKPState==LOCK) printf("\t>>Cannot read history %s file!\n",FileName);
fclose(fp); /*关闭文件*/
return -1;
}
fseek(fp,0,2); //将文件的位置指针移到文件的末尾
if (ftell(fp)>=14) /*文件不空*/
{
rewind(fp); //使文件的位置指针重新返回文件的开头
fseek(fp,WPosition,0); //将文件的位置指针移到离文件头WPosition个字节处
while (1) /*在文件中逐个记录查找*/
{
fread(®data,sizeof(WATERLEVELDATA),1,fp);
if (feof(fp)) break;
if ((regdata.time[5]!=0)||(regdata.water_level[5]!=0)||(regdata.cr_lf!=0x0a))
{
WPosition++;
fseek(fp,WPosition,0);
continue;
}
if ((strcmp(regdata.time,StartQueryTime)>=0&&strcmp(regdata.time,EndQueryTime)<=0)) break;
if(strcmp(regdata.time,EndQueryTime)>0)
{
WPosition = 14;
fclose(fp); /*关闭文件*/
return -2;
}
}
if(!feof(fp)) /*找到需要的记录*/
{
WPosition = ftell(fp); //文件指针当前位置相对于文件开头的位移量
for(j=0; j<6; j++)
OutWaterLevelregdata.time[j] = regdata.time[j];
strcpy(OutWaterLevelregdata.water_level, regdata.water_level);
}
else /*未找到需要的记录*/
{
if(GetKPState==LOCK) printf("\t>>no match data!\n");
WPosition = 14;
fclose(fp); /*关闭文件*/
return -2;
}
}
else /*文件为空*/
{
if(GetKPState==LOCK) printf("\t>>This file has no data!\n");
fclose(fp); /*关闭文件*/
return -3;
}
fclose(fp); /*关闭文件*/
return 0;
}
//读记录的历史降雨量数据
long RPosition=16;
int ReadOldRainfallData( char *FileName, char *StartQueryTime,char *EndQueryTime )
{
int j;
static FILE *fp = NULL;
RAINFALLDATA regdata;
if(fp!=NULL) fclose(fp);
if ((fp=fopen(FileName,"rb"))==NULL) /*以只读方式打开一个二进制文件*/
{
if(GetKPState==LOCK) printf("\t>>Cannot read history %s file!\n",FileName);
fclose(fp); /*关闭文件*/
return -1;
}
fseek(fp,0,2); //将文件的位置指针移到文件的末尾
if (ftell(fp)>=16) /*文件不空*/
{
rewind(fp); //使文件的位置指针重新返回文件的开头
fseek(fp,RPosition,0); //将文件的位置指针移到离文件头RPosition个字节处
while (1) /*在文件中逐个记录查找*/
{
fread(®data,sizeof(RAINFALLDATA),1,fp);
if (feof(fp)) break;
if ((regdata.time[5]!=0)||(regdata.rainfall[5]!=0)||(regdata.cr_lf!=0x0a))
{
RPosition++;
fseek(fp,RPosition,0);
continue;
}
if ((strcmp(regdata.time,StartQueryTime)>=0)&&(strcmp(regdata.time,EndQueryTime)<=0)) break;
if(strcmp(regdata.time,EndQueryTime)>0)
{
RPosition = 16;
fclose(fp); /*关闭文件*/
return -2;
}
}
if(!feof(fp)) /*找到需要的记录*/
{
RPosition = ftell(fp); //文件指针当前位置相对于文件开头的位移量
for(j=0; j<6; j++)
OutRainfallregdata.time[j] = regdata.time[j];
strcpy(OutRainfallregdata.rainfall, regdata.rainfall);
OutRainfallregdata.type_of_Ivtime = regdata.type_of_Ivtime;
}
else /*未找到需要的记录*/
{
if(GetKPState==LOCK) printf("\t>>no match data!\n");
RPosition = 16;
fclose(fp); /*关闭文件*/
return -2;
}
}
else /*文件为空*/
{
if(GetKPState==LOCK) printf("\t>>This file has no data!\n");
fclose(fp); /*关闭文件*/
return -3;
}
fclose(fp); /*关闭文件*/
return 0;
}
int ModifyWaterHead(char *FileName, unsigned int BackNum,int direction ,int Center) //direction=0, 文件指针回退;=1, 文件指针前进
{
unsigned long filelen;
unsigned long bytenum;
WATERLEVELHEAD WaterFileHead={WATER_HEAD, WATER_REC, WATER_REC, WATER_REC};
static FILE *fp = NULL;
bytenum = WATER_REC*BackNum;
if(BackNum==0) return 0;
if(fp!=NULL) fclose(fp);
if((fp=fopen(FileName,"rb+"))==NULL) /*以读写方式打开一个二进制文件*/
{
fclose(fp); /*关闭文件*/
return -1;
}
fseek(fp,0,2); //将文件的位置指针移到文件的末尾
filelen = ftell(fp);
if (filelen>=WATER_REC) /*文件不空*/
{
rewind(fp); //使文件的位置指针重新返回文件的开头
fread(&WaterFileHead,sizeof(WATERLEVELHEAD),1,fp);
///////////////////zjs add in200608011003 start
if (filelen!=WaterFileHead.end_report) WaterFileHead.end_report=filelen;
if (WaterFileHead.start1_report>filelen) WaterFileHead.start1_report=filelen;
if (WaterFileHead.start2_report>filelen) WaterFileHead.start2_report=filelen;
WaterFileHead.water_head[0]='W';
WaterFileHead.water_head[1]=0x0;
///////////////////zjs add in200608011003 end
if(Center==1)
{
if(direction==0)
{
if (WaterFileHead.start1_report>bytenum+WATER_REC) WaterFileHead.start1_report-=bytenum;
else WaterFileHead.start1_report=WATER_REC;
}
else
{
if (WaterFileHead.start1_report+bytenum>WaterFileHead.end_report) WaterFileHead.start1_report+=bytenum;
else WaterFileHead.start1_report=WaterFileHead.end_report;
}
fseek(fp, 2, 0);
fwrite(&WaterFileHead.start1_report,4,1,fp);
}
else
{
if(direction==0)
{
if (WaterFileHead.start2_report>bytenum+WATER_REC) WaterFileHead.start2_report-=bytenum;
else WaterFileHead.start2_report=WATER_REC;
}
else
{
if (WaterFileHead.start2_report+bytenum>WaterFileHead.end_report) WaterFileHead.start2_report+=bytenum;
else WaterFileHead.start2_report=WaterFileHead.end_report;
}
fseek(fp, 6, 0);
fwrite(&WaterFileHead.start2_report,4,1,fp);
}
}
else //非法文件
{
fclose(fp);
remove(FileName);
if(GetKPState==LOCK) printf("ModifyWaterHead remove %s file!\n", FileName);
return -2;
}
return 0;
}
int ModifyRainHead(char *FileName, unsigned int BackNum,int direction ,int Center) //direction=0, 文件指针回退;=1, 文件指针前进
{
unsigned long filelen;
unsigned long bytenum;
RAINFALLHEAD RainFileHead={RAINFALL_HEAD, RAINFALL_REC, RAINFALL_REC, RAINFALL_REC};
static FILE *fp = NULL;
bytenum = RAINFALL_REC*BackNum;
if(BackNum==0) return 0;
if(fp!=NULL) fclose(fp);
if((fp=fopen(FileName,"rb+"))==NULL) /*以读写方式打开一个二进制文件*/
{
fclose(fp); /*关闭文件*/
return -1;
}
fseek(fp,0,2); //将文件的位置指针移到文件的末尾
filelen = ftell(fp);
if (filelen>=RAINFALL_REC) /*文件不空*/
{
rewind(fp); //使文件的位置指针重新返回文件的开头
fread(&RainFileHead,sizeof(RAINFALLDATA),1,fp);
///////////////////zjs add in200608011003 start
if (filelen!=RainFileHead.end_report) RainFileHead.end_report=filelen;
if (RainFileHead.start1_report>filelen) RainFileHead.start1_report=filelen;
if (RainFileHead.start2_report>filelen) RainFileHead.start2_report=filelen;
RainFileHead.rainfall_head[0]='R';
RainFileHead.rainfall_head[1]='F';
RainFileHead.rainfall_head[2]='Q';
RainFileHead.rainfall_head[3]=0x0;
///////////////////zjs add in200608011003 end
if(Center==1)
{
if(direction==0)
{
if (RainFileHead.start1_report>bytenum+RAINFALL_REC) RainFileHead.start1_report-=bytenum;
else RainFileHead.start1_report=RAINFALL_REC;
}
else
{
if (RainFileHead.start1_report+bytenum>RainFileHead.end_report) RainFileHead.start1_report+=bytenum;
else RainFileHead.start1_report=RainFileHead.end_report;
}
fseek(fp, 4, 0);
fwrite(&RainFileHead.start1_report,4,1,fp);
}
else
{
if(direction==0)
{
if (RainFileHead.start2_report>bytenum+RAINFALL_REC) RainFileHead.start2_report-=bytenum;
else RainFileHead.start2_report=RAINFALL_REC;
}
else
{
if (RainFileHead.start2_report+bytenum>RainFileHead.end_report) RainFileHead.start2_report+=bytenum;
else RainFileHead.start2_report=RainFileHead.end_report;
}
fseek(fp, 8, 0);
fwrite(&RainFileHead.start2_report,4,1,fp);
}
}
else //非法文件
{
fclose(fp);
remove(FileName);
if(GetKPState==LOCK) printf("ModifyRainHead remove %s file!\n", FileName);
return -2;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -