在c++如何以文件的方式操作dbf文件

vclzy 2003-07-10 01:57:24
在c++如何以文件的方式操作dbf文件,实现添加,删除,修改等操作
...全文
147 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fj_jiangqi 2003-07-16
  • 打赏
  • 举报
回复
这是我第1次对外公布大量代码55555……
虽然不是好的代码,也是不重要的核心代码,我开始出卖了我自己555555555……
它是我的隐私,就象是我的日记一样,可……555555…………
-------------------------
39度十几天了,40度四五天了,今天40度,明天还是40度,没有空调,没有MM,叫我怎么活?
我就要被烤成人干了,救命啊……
20多天没下过雨,也没有阴天过,甚至连多云都很少出现过。
-------------------------
我流落在凄凉的世界里-孤苦伶仃
我过着动荡无助的生活-四处漂泊
vclzy 2003-07-16
  • 打赏
  • 举报
回复
fj_jiangqi谢谢啦。。我找这个代码找了好久了,我决定把100分都给你
本人对你的景仰有如黄河之水滔滔不绝。。。。。。。55555555555
vclzy 2003-07-16
  • 打赏
  • 举报
回复
呵呵,,谢谢啦。。。55555555555555555
我流落在凄凉的世界里-孤苦伶仃
我过着动荡无助的生活-四处漂泊

也许磨练是一种财富,,
冬天来了春天还会早吗...
fj_jiangqi 2003-07-15
  • 打赏
  • 举报
回复
u开头的变量是系统保留的或c里根本就用不着的。
-------------------------
39度十几天了,今天40度,明天还是40度,没有空调,没有MM,真是痛苦……
20多天没下过雨,也没有阴天过,甚至连多云都很少出现过。
40多度啊!没有空调,叫我怎么活……
-------------------------
我流落在凄凉的世界里-孤苦伶仃
我过着动荡无助的生活-四处漂泊
fj_jiangqi 2003-07-15
  • 打赏
  • 举报
回复
应该是全了,这是我在古代的时候用c写的。并没有真正的使用,运行是不会出错,但效率一定不高,因为没有进行优化处理。现在的编译系统编译有些地方可能会有一些小错误,你修改一下就ok了。
给你参考吧,5555555555……555555555……555555555555……
-------------------------
39度十几天了,今天40度,明天还是40度,没有空调,没有MM,真是痛苦……
20多天没下过雨,也没有阴天过,甚至连多云都很少出现过。
40多度啊!没有空调,叫我怎么活……
-------------------------
我流落在凄凉的世界里-孤苦伶仃
我过着动荡无助的生活-四处漂泊
fj_jiangqi 2003-07-15
  • 打赏
  • 举报
回复
dbffielno(DBF *dbf,char *fiel)
{
char p[15];
unsigned int fiels=0;
struct _struct_dbf *_dbf;
register unsigned int i;
_dbf=(struct _struct_dbf *)dbf;
rewind(_dbf->f);
fread(&_dbf->top,32,1,_dbf->f);
fiels=(_dbf->top.toplong>>5)-1;
for(i=0;i<fiels;i++)fread(&_dbf->fiel[i],32,1,_dbf->f);
for(i=0;i<fiels;i++)if(stricmp(fiel,_dbf->fiel[i].name)==0)break;
return((i==fiels)?0:(i+1));
}
dbfread(char *buff,unsigned long recn,unsigned int fiel,DBF *dbf)
{
int i;
struct _struct_dbf *_dbf;
_dbf=(struct _struct_dbf *)dbf;
if(fiel>_dbf->fiels)return(0);
if(fseek(_dbf->f,_dbf->top.toplong+recn*_dbf->top.bulong+_dbf->star[fiel-1],0))
return(0);
i=fread(buff,1,_dbf->fiel[fiel-1].wide,_dbf->f);
buff[i]=0;
return(i);
}

dbfwrite(char *buff,unsigned long recn,unsigned int fiel,DBF *dbf)
{
struct _struct_dbf *_dbf;
_dbf=(struct _struct_dbf *)dbf;
if(recn>=_dbf->top.recc)return(0);
if(fiel>_dbf->fiels)return(0);
fseek(_dbf->f,_dbf->top.toplong+recn*_dbf->top.bulong+_dbf->star[fiel-1],0);
return(fwrite(buff,1,dbf->fiel[fiel-1].wide,_dbf->f));
}
DBF * dbfsopen(char *filename)
{
unsigned int i;
struct _struct_dbf *_dbf;
DBF *dbf;
if((dbf=(DBF *)malloc(sizeof(DBF)))==NULL)goto end;
_dbf=(struct _struct_dbf *)dbf;
if((_dbf->f=_fsopen(filename,"rb",SH_DENYNO))==NULL){
free(dbf);
dbf=NULL;
goto end;
}
fread(&_dbf->top,32,1,dbf->f);
if((_dbf->fiel=(struct DBFFIEL *)malloc(_dbf->top.toplong))==NULL){
fclose(_dbf->f);
free(dbf);
dbf=NULL;
goto end;
}
_dbf->fiels=(_dbf->top.toplong>>5)-1;
if((_dbf->star=(int *)malloc(sizeof(int)*_dbf->fiels))==NULL){
fclose(_dbf->f);
free(_dbf->fiel);
free(dbf);
dbf=NULL;
goto end;
}
fread(_dbf->fiel,32,_dbf->fiels,_dbf->f);
for(i=0,_dbf->star[0]=1;i<_dbf->fiels;i++)
_dbf->star[i+1]=_dbf->star[i]+_dbf->fiel[i].wide;
end:
return(dbf);
}
-------------------------
39度十几天了,今天40度,明天还是40度,没有空调,没有MM,真是痛苦……
20多天没下过雨,也没有阴天过,甚至连多云都很少出现过。
40多度啊!没有空调,叫我怎么活……
-------------------------
我流落在凄凉的世界里-孤苦伶仃
我过着动荡无助的生活-四处漂泊
fj_jiangqi 2003-07-15
  • 打赏
  • 举报
回复
找回了一些,可还有一些与些无关的数据,可能要送到zip公司去解密,我的密码32位,痛苦啊……………………而且全都不一定样……………………
struct _struct_dbf{
FILE *f;
unsigned int *star,fiels;
struct DBFTOP top;
struct DBFFIEL *fiel;
};

typedef struct _struct_dbf DBF;

DBF * dbfopen(char *filename)
{
unsigned int i;
struct _struct_dbf *_dbf;
DBF *dbf;
if((dbf=(DBF *)malloc(sizeof(DBF)))==NULL)goto end;
_dbf=(struct _struct_dbf *)dbf;
if((_dbf->f=fopen(filename,"rb"))==NULL){
free(dbf);
dbf=NULL;
goto end;
}
fread(&_dbf->top,32,1,dbf->f);
if((_dbf->fiel=(struct DBFFIEL *)malloc(_dbf->top.toplong))==NULL){
fclose(_dbf->f);
free(dbf);
dbf=NULL;
goto end;
}
_dbf->fiels=(_dbf->top.toplong>>5)-1;
if((_dbf->star=(int *)malloc(sizeof(int)*_dbf->fiels))==NULL){
fclose(_dbf->f);
free(_dbf->fiel);
free(dbf);
dbf=NULL;
goto end;
}
fread(_dbf->fiel,32,_dbf->fiels,_dbf->f);
for(i=0,_dbf->star[0]=1;i<_dbf->fiels;i++)
_dbf->star[i+1]=_dbf->star[i]+_dbf->fiel[i].wide;
end:
return(dbf);
}

dbfclose(DBF *dbf)
{
struct _struct_dbf *_dbf;
_dbf=(struct _struct_dbf *)dbf;
fclose(_dbf->f);
free(_dbf->fiel);
free(_dbf->star);
free(dbf);
}
-------------------------
39度十几天了,今天40度,明天还是40度,没有空调,没有MM,真是痛苦……
20多天没下过雨,也没有阴天过,甚至连多云都很少出现过。
40多度啊!没有空调,叫我怎么活……
-------------------------
我流落在凄凉的世界里-孤苦伶仃
我过着动荡无助的生活-四处漂泊
vclzy 2003-07-15
  • 打赏
  • 举报
回复
老兄你的加密代码能给我看看吗,,本万万分,,感谢!
vclzy 2003-07-14
  • 打赏
  • 举报
回复
谁有代码,本人重分感谢!
fj_jiangqi 2003-07-14
  • 打赏
  • 举报
回复
我给你数据结构吧。
struct DBFFIEL{
unsigned char name[11],type,u[4],wide,dec,u0[14];
};
struct DBFTOP{
char u[4];
long recc;
short toplong,bulong;
char u0[20];
};
一个是字段表的结构,一个是表头的结构,支持dbase,foxbase,vfp的dbf文件结构。
代码你可以慢慢写,我的代码曾加密保存,现在密码给忘了。(^0^)
-------------------------
39度一周多了,今天39度,明天还是39度,没有空调,没有MM,真是痛苦……
-------------------------
我流落在凄凉的世界里-孤苦伶仃
我过着动荡无助的生活-四处漂泊
tchatcha 2003-07-11
  • 打赏
  • 举报
回复
up
fj_jiangqi 2003-07-10
  • 打赏
  • 举报
回复
以文件方式直接读取,有点麻烦,以前我有写过。
关键你要了解dbf文件的结构,在vfp的帮助中有详细提供,可以试试。
几个重要数据,记录宽度,记录启始偏移量,各个字段宽度及偏移量。
删除只是在记录偏移量0的字节上写上一个标志。
-------------------------
我流落在凄凉的世界里-孤苦伶仃
我过着动荡无助的生活-四处漂泊
fj_jiangqi 2003-07-10
  • 打赏
  • 举报
回复
用ado来操作比较方便。
-------------------------
我流落在凄凉的世界里-孤苦伶仃
我过着动荡无助的生活-四处漂泊

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧