哪里有操作DBF文件的C源码下载(十万火急) ?

happy 2000-04-30 05:25:00
...全文
297 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
happy 2000-05-09
  • 打赏
  • 举报
回复
谢谢你们

我也放弃了

fuzhenxing 2000-05-07
  • 打赏
  • 举报
回复
#include "dbf.h"
#include <dos.h>
#define OK 0
#define CANCEL -1

DBFop::DBFop(char *DBFname)
{
initDBF(DBFname,SHARE and NEEDWRITE);
}

DBFop::DBFop(char *DBFname,int op)
{
initDBF(DBFname,op);
}

void DBFop::initDBF(char *DBFname,int op)
{
int tmpi1,tmpi2;
int _access,_shflag,_mode;
// char *p;
DBFstru=NULL;
strcpy(DBFfn,DBFname);
tmpi1=op&0x00FF; // EXCLUSIVE
tmpi2=op&0xFF00; // NEEDWRITE
_access=O_BINARY;
_access and =tmpi2?O_RDWR:O_RDONLY;
_shflag=tmpi1?SH_DENYRW:SH_DENYNONE;
_mode=S_IREAD;if(tmpi2) _mode and =S_IWRITE;
DBFfp=sopen(DBFfn,_access,_shflag,_mode);
if(DBFfp!=-1)
{
read(DBFfp,&DBFhead,32);
iFieldNum=DBFhead.Addr/32-1;
dataStart=DBFhead.Addr;
DBFstru=(DBFstruType *)farmalloc(iFieldNum*32);
read(DBFfp,DBFstru,iFieldNum*32);
/*
tmpi=strlen(DBFname);
strncpy(LDXfn,DBFname,tmpi-3);
LDXfn[tmpi-3]=0;
strcat(LDXfn,"LDX");
*/
}
else
{
DBFhead.DBFcode=0;
DBFhead.Len=16;
}
if(DBFhead.DBFcode==-11)
{
tmpi1=strlen(DBFname);
strncpy(FPTfn,DBFname,tmpi1-3);
FPTfn[tmpi1-3]=0;
strcat(FPTfn,"FPT");
FPTfp=sopen(FPTfn,_access,_shflag,_mode);
cHasFPT=1;
}
else cHasFPT=0;
dataBuf[0]=dataBuf[1]=dataBuf[2]=dataBuf[3]=NULL;
recPerBuf=64000L/DBFhead.Len;
isOpen=1;
cHasMEM=0;
cHasXMS=0;
cReadBuf=0;
cWriteBuf=0;
}

DBFop::~DBFop()
{
if(cReadBuf) delete readRecordBuf;
if(cWriteBuf) delete writeRecordBuf;
if(cHasMEM) freeDBFMEM();
if(cHasXMS) freeDBFXMS();
if(isOpen&&DBFfp!=-1) close(DBFfp);
if(isOpen&&FPTfp!=-1&&cHasFPT) close(FPTfp);
if(DBFstru!=NULL) farfree(DBFstru);
}

int DBFop::isOk(void)
{
return DBFfp!=-1?1:0;
}

int DBFop::isDBFok(void)
{
return DBFfp!=-1?OK:CANCEL;
}

long DBFop::getDBFnum(void)
{
return DBFhead.Num;
}

int DBFop::reLoadDBFhead(void)
{
if(DBFfp==-1) return 1;
lseek(DBFfp,0,0);
read(DBFfp,&DBFhead,32);
return 0;
}

int DBFop::getDBFrecord(long lRecordNo,char *cRetChar)
{
return getDBFrecord(lRecordNo,cRetChar,0);
}

int DBFop::getDBFrecord(long lRecordNo,char *cRetChar,int len)
{
if(lRecordNo>=DBFhead.Num)
{
*cRetChar=0;return 2;
}
lseek(DBFfp,lRecordNo*DBFhead.Len+DBFhead.Addr,0);
read(DBFfp,cRetChar,DBFhead.Len-len);
cRetChar[DBFhead.Len-len]=0;
return 0;
}
sunsol 2000-05-02
  • 打赏
  • 举报
回复
问一下文件结尾的1A标志怎么在我用foxplus手动append单条记录时
没有出现?
syz 2000-04-30
  • 打赏
  • 举报
回复
不知你想干什麽?我曾经也有你一样的问题,后来放弃了,因为还是用FOX 比较方便。
访问DBF 就象用DBC驱动比较来的快,不知你是不是想寻求刺激?那就去“文件格式”里
看看吧!要是我赶程序的话,我是不会这样做的。":-)

69,337

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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