vc++ 文件操作代码

来源:互联网 发布:网络棋牌赌博可以报警 编辑:程序博客网 时间:2024/04/28 07:09
//---------------------------------------------------------------------------
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;
原创粉丝点击