社区
C语言
帖子详情
哪里有操作DBF文件的C源码下载(十万火急) ?
happy
2000-04-30 05:25:00
...全文
319
4
打赏
收藏
哪里有操作DBF文件的C源码下载(十万火急) ?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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驱动比较来的快,不知你是不是想寻求刺激?那就去“文件格式”里
看看吧!要是我赶程序的话,我是不会这样做的。":-)
C++
操作
dbf
文件
(深入剖析
dbf
文件
)
深入剖析
dbf
文件
,以
文件
形式读取
dbf
文件
. 不需要安装Visual Foxpro驱动,非常值得学习
java
操作
dbf
文件
包括java读写
dbf
文件
源码
,可改写重用,可用于生成
dbf
文件
或解析
dbf
文件
获取数据。
基于java
dbf
-0[1].4.0.jar包的
dbf
文件
操作
源码
一般的
dbf
文件
都是数据库
操作
文件
,用c语言进行
操作
的dll很多,但是java
操作
的很少,我找到了一个java
dbf
-0[1].4.0.jar的包,但是
操作
效果很不理想,尤其是末尾空格和乱码问题,于是我在这个jar包的基础上进行进一步开发,在尽量不影响效率的情况下,增加了对
dbf
各个方面的处理功能:查询,创建,copy
文件
结构等功能,目前没有发现bug,说明文档在程序中很详细,以下是我的说明演示部分代码,此
源码
需要5个积分,主要是因为可能需求不多,卖得少,成本高,望大家海涵:) 演示部分
源码
: public static void main(String[] args) { // TODO Auto-generated method stub /************************************************/ /* 初始化
dbf
操作
对象 */ /************************************************/
DBF
_tool
dbf
= new
DBF
_tool(); /************************************************/ /* 创建
dbf
操作
,生成"creat
DBF
.
dbf
",此处采用相对路径 */ /* 也可以用绝对路径进行创建 */ /************************************************/ System.out.println("正在创建
dbf
文件
:creat
DBF
.
dbf
...");
dbf
.createFile("creat
DBF
.
dbf
"); //
dbf
.createFile("D:\\creat
DBF
.
dbf
");//绝对路径 /************************************************/ /* 创建
dbf
表头信息,此处只能一次性输入所有表头信息 */ /* 表头信息由FiledInfor类生成,然后放入vector中 */ /* 此处为:编号,姓名,年龄,salary(薪水),出生日期 */ /************************************************/ System.out.println("创建
dbf
文件
表头信息 ..."); FiledInfor filedinfor;//表头信息对象 Vector vecTitle = new Vector(); filedinfor = new FiledInfor(); filedinfor.filedDataType =
DBF
_tool.FIELD_TYPE_C;//类型 filedinfor.filedName = "编 号"; //名称 filedinfor.fieldLength = 8; //长度 vecTitle.add(filedinfor); filedinfor = new FiledInfor(); filedinfor.filedDataType =
DBF
_tool.FIELD_TYPE_C; filedinfor.filedName = "姓 名"; filedinfor.fieldLength = 12; vecTitle.add(filedinfor); filedinfor = new FiledInfor(); filedinfor.filedDataType =
DBF
_tool.FIELD_TYPE_N; filedinfor.filedName = "年 龄"; filedinfor.fieldLength = 5; filedinfor.decimalCount = 0; //精度 vecTitle.add(filedinfor); filedinfor = new FiledInfor(); filedinfor.filedDataType =
DBF
_tool.FIELD_TYPE_F; filedinfor.filedName = "salary";//不支持"salary(**)"这种方式,但支持中英文结合 f
C++
操作
Dbf
文件
功能:
操作
DBF
文件
的C++代码,可以创建
DBF
文件
、读取
DBF
文件
、写入
DBF
文件
、拷贝
DBF
文件
的结构 环境:需要C++11和BOOST库,需要设置环境变量BOOST_HOME指向BOOST的根目录 例子:见main.cpp
java
dbf
源码
java
dbf
源码
C语言
70,024
社区成员
243,253
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章