用C语言处理数据库需要注意的一个问题

Author: 王雨 Date: 1997-01-01

  用C语言直接操作DBF数据库记录时,必须跳过位于库文件首部的库文件结构说明部分。这部分以回车符号(0DH)为结束标志。不少用户经常采用:
  for(i=0;dat!=0x0d;i++)dat=fegtc(fp);
  或while(fgetc(fp)!=0x0d);
  这两种方法将文件指针fp定位到首记录首字节处。可是这两种定位指针的方法却是错误的,因为上面两语句实际上从库结构的第一个字节开始逐个字节地读,一直到第一个内容为0DH的字节为止。这样一旦库文件结构说明部分当中出现0DH的字节,那就会出错。以下介绍两种正确的方法:
  一、若库文件共有n个字段,则文件结构说明部分长为r=32*n+33。那么就可用函数进行定位。例如,某库有20个字段,则
  r=32*20+33=672,于是用
  fseek(fp,673L,0)进行定位。此处的L不可少,它表示数据类型为长整型。
  二、由于库结构部分的第九、十两字节记载着文件结构部分的长度,因此可用下面的C函数返回该长度值:
  long ret-len(char *dbfname[])
  { short *p;
    FILE *fp;
    char buf[10];
    fp=fopen(dbfname,"rb");
    p=(short *)buf;
    fread(buf,10,1,fp);
    fclose(fp);
    return((long)*(p+4));}
  然后再用fseek()定位即可。