数据库oracle文件怎么打开,Oracle

1634e7bd7932aaa44074c3f6104324fb.png

2018-08-15

怎样打开.db的数据库文件啊

如果你的要求是用一种语言来打开数据库的话,那么你必须首先了解dbf文件的格式,这一点非常的重要。下面是一个c语言写的读dbf文件的小程序,你看看吧!,你可以编辑一下,看可否达到你的要求!#include #include #define NFIELDS 5#define TRUE 1#define FALSE 0/* DBF文件头结构 */struct dbf_head{ char vers; unsigned char yy,mm,dd; unsigned int no_recs; unsigned short head_len,rec_len; char reserved[20];};...全部

如果你的要求是用一种语言来打开数据库的话,那么你必须首先了解dbf文件的格式,这一点非常的重要。下面是一个c语言写的读dbf文件的小程序,你看看吧!,你可以编辑一下,看可否达到你的要求!#include #include #define NFIELDS 5#define TRUE 1#define FALSE 0/* DBF文件头结构 */struct dbf_head{ char vers; unsigned char yy,mm,dd; unsigned int no_recs; unsigned short head_len,rec_len; char reserved[20];};/* DBF字段描述结构 */struct field_element{ char field_name[11]; char field_type; unsigned int offset; unsigned char field_length; unsigned char field_decimal; char reserved1[2]; char dbaseiv_id; char reserved2[10]; char production_index;};char *dbf_fields_name[NFIELDS]={ "a", "b","c","d","e"};/* 全局变量 */struct dbf_head file_head;struct field_element *fields;int *length;unsigned int *offset;/* 整形数字节顺序改变函数 */void revert_unsigned_short(unsigned short *a){ unsigned short left,right; left=right=*a; *a=((left&0x00ff)>8);}void revert_unsigned_int(unsigned int *a){ unsigned int first,second,third,forth; first=second=third=forth=*a; *a=((first&0x000000ff)>8)|((forth&0xff000000)>>24);}/* 主函数代码 */void main(){ register int i,j; FILE *fp_dat; char *buffer; char *allspace; int fields_count, matched=FALSE; unsigned int counts; /* 打开dbf文件 */ if((fp_dat=fopen("a。

dbf","rb"))==NULL){ fprintf(stderr,"Cannot open dbf file to read!

"); exit(1); } /* 读取表头纪录 */ fseek(fp_dat,0L,SEEK_SET); fread((void*)&file_head,sizeof(struct dbf_head),1,fp_dat); revert_unsigned_int(&file_head。

no_recs); revert_unsigned_short(&file_head。head_len); revert_unsigned_short(&file_head。rec_len); /* 计算字段数 */ fields_count=(file_head。

head_len-sizeof(struct dbf_head)-1-263)/sizeof(struct field_element); /* 开辟存储字段子记录的空间 */ if((fields=(struct field_element*)malloc(sizeof(struct field_element)*fields_count))==NULL){ fprintf(stderr,"Cannot allocate memory for fields array !

"); fclose(fp_dat); exit(2); } /* 开辟存储一条数据记录的空间 */ if((buffer=(char*)malloc(sizeof(char)*file_head。

rec_len))==NULL){ fprintf(stderr,"Cannot allocate memory for record buffer!

"); fclose(fp_dat); exit(3); } /* 开辟一个全为空格的纪录,以便后面做比较 */ if((allspace=(char*)malloc(sizeof(char)*file_head。

rec_len))==NULL){ fprintf(stderr,"Cannot allocate memory for all_space record buffer!

"); fclose(fp_dat); exit(4); } else{ memset((void*)allspace,'x20',file_head。

rec_len-1); allspace[file_head。rec_len]=' '; } /* 读取所有的字段子记录,调整整形数的字节顺序 */ fread((void*)fields,sizeof(struct field_element),fields_count,fp_dat); for(i=0;i revert_unsigned_int(&fields[i]。

offset); /* 计算各个字段的字节偏移量,第一字节为删除标记 */ fields[0]。offset=1; for(i=1;i fields[i]。offset=fields[i-1]。

offset (unsigned short)fields[i-1]。field_length; /* 开辟存储字段长度和偏移量的数组 */ length=(int*)malloc(sizeof(int)*fields_count); offset=(unsigned int*)malloc(sizeof(unsigned int)*fields_count); if(length==NULL||offset==NULL){ fprintf(stderr,"Cannot allocate memory for array length or offset。

"); exit(-1); } /* 找到所需字段的偏移量和长度,如果没有相应字段,程序退出 */ for(i=0;i { for(j=0;j { if(strcmp(dbf_fields_name[i],fields[j]。

field_name)==0) { offset[i]=fields[j]。offset - 1; length[i]=fields[j]。field_length; matched=TRUE; break; } if(!matched){ fprintf(stderr,"dbf file structure is invalid, field %s not found。

", dbf_fields_name[i]); exit(-1); } else matched=FALSE; } } /* 定位文件指针到数据记录的开始位置 */ fseek(fp_dat,(long)file_head。

head_len,SEEK_SET); /* 读取每条记录的字段数据 */ for(counts=0;counts { /* 如果有删除标记,跳到下一条记录 */ if(fgetc(fp_dat)==(int)'x2a') { fseek(fp_dat,(int)file_head。

rec_len-1,SEEK_CUR); continue; } fread((void*)buffer,(int)file_head。rec_len-1,1,fp_dat); buffer[file_head。

rec_len]=' '; /*去掉全为空格的记录行*/ if(strcmp(buffer,allspace)==0) continue; } fclose(fp_dat); /* 释放开辟的空间 */ free(buffer); free(allspace); free(offset); free(length);}。

收起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值