您的位置:首页 > 编程语言 > C语言/C++

vc++ 文件操作代码

2007-04-02 17:31 357 查看
//---------------------------------------------------------------------------
int ENV_Data_Num ( char * FileName )
{
FILE * fin ;
short int Rec_Num ;
if ( ( fin = fopen ( FileName , "rb" ) ) == NULL )
{
return -1 ;
}
Skip_Eof ( fin ) ;
fread ( &Rec_Num , sizeof ( short int ) , 1 , fin ) ;
fclose ( fin ) ;
return Rec_Num ;
}
//---------------------------------------------------------------------------
void Skip_Eof ( FILE * fin )
{
int c ;
c = 0 ;
while ( c != 26 )
{
c = fgetc ( fin ) ;
}
}
//---------------------------------------------------------------------------
int ENV_Data_Read ( char * FileName , void * pv , int Which_From )
{
FILE * fin ;
short int Rec_Num , Rec_Size ;
if ( ( fin = fopen ( FileName , "rb" ) ) == NULL )
{
return -1 ;
}
Skip_Eof ( fin ) ;
fread ( &Rec_Num , sizeof ( short int ) , 1 , fin ) ;
if ( Rec_Num <= Which_From )
{
fclose ( fin ) ;
return -1 ;
}
fread ( &Rec_Size , sizeof ( short int ) , 1 , fin ) ;
if ( fseek ( fin , Which_From * Rec_Size , SEEK_CUR ) != 0 ) return 1 ;
if ( fread ( pv , Rec_Size , 1 , fin ) != ( size_t )1 )
{
fclose ( fin ) ;
return -1 ;
}
fclose ( fin ) ;
return Rec_Num ;
}
//--------------------------------------------------------------------------
int ENV_Data_Write(char *FileName,void *pv,int size,int Where_To)
{
//适用于修改文件中的某条记录或向文件尾部添加一条新的纪录
FILE *fin;
bool first_access = false;
short int Rec_Num,Rec_Size;
if((fin = fopen(FileName,"rb+")) == NULL)
{
if((fin = fopen(FileName,"wb+")) != NULL)
{
first_access = true;
goto Lab;
}
return -1;
}
Lab:
if(first_access)
{
char c = 26;
Rec_Num = 1;
fputc(c,fin);
fwrite(&Rec_Num,sizeof(short int),1,fin);
Rec_Size = size;
fwrite(&Rec_Size,sizeof(short int),1,fin);
fseek(fin,0,SEEK_SET);
}
Skip_Eof (fin) ;
fread ( &Rec_Num , sizeof (short int) , 1 , fin ) ;
if ( Rec_Num <= Where_To )
{
Rec_Num = Where_To+1;
fseek(fin,-sizeof(short int),SEEK_CUR);
fwrite(&Rec_Num,sizeof(short int),1,fin);
fseek(fin,-sizeof(short int),SEEK_CUR);
fread(&Rec_Num,sizeof(short int),1,fin);
}
fread(&Rec_Size,sizeof(short int),1,fin);
if(fseek(fin,Where_To*Rec_Size,SEEK_CUR)!=0)
return -1;
if(fwrite(pv,Rec_Size,1,fin) != (size_t)1)
{
fclose(fin);
return -1;
}
fclose(fin);
return Rec_Num;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: