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;
}
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;
}
相关文章推荐
- VC文件操作:打开文件对话框 OPENFILENAME 代码
- vc文件操作代码
- VC文件操作:保存文件对话框 OPENFILENAME 代码
- VC中文件(夹)目录与路径操作原理与代码实现
- Android用代码操作Liunx命令进行文件的操作
- 使用VC++操作Excel文件
- 获取文件最后修改时间的VC代码
- vc编写的用UDP协议传输文件的代码
- java文件操作代码片断实例实现统计文件中字母出现的个数功能
- VC INI文件操作(转)
- VC--操作HTML的TABLE的样例代码
- VC2005:无法执行添加/移除操作,因为代码元素是只读的....多个解决办法
- Linux命令操作文件,发布代码到服务
- [转]MS-VC 使用MAP文件快速定位程序崩溃代码行(转贴)
- [经验总结]清空目录操作的VC++代码
- 文件操作简易代码[C语言]
- BMP位图文件结构及VC操作
- 利用Asp.net IO.File类完成文件新建复制删除操作(代码调试通过)(转)
- VC中文件操作的几种方式(1,2)
- 这么详细的分类 VC/C++源代码网站你见过没有? VC/C++中的每一个方法,每一个操作,每一个头文件,每一个函数,每一个类.每一个属性,每一个事件都有相应的范例代码