⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileio.cpp

📁 湖北水文黄石试点集中器代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			       	  // 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(&regdata,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(&regdata,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 + -