我简单的做了一个,是控制台应用程序,不全面,只做到将库中的字段读出,不过你可以再补充,如下:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
Tfield=record //定义字段记录
field_name:array [0..10] of char;//字段名称
field_type:char
//字段类型
field_null:longint
//未定义,空读
field_length:byte
//字段长度
field_decimal_places:byte;//字段的小数位数,如果类型是数值型的话有用
field_reserved_1:word
//保留
field_wordarea_id:byte
//工作区ID
filed_reserved_2:array[0..9] of byte;//保留
field_index:byte
//索引标识
end;
var
i:integer;
inf,outf:string;
sf,df:file of byte;
read1,read2:byte;
read3,read4:string;
field:tfield;
fno1,fno2:word;
begin
// Insert user code here
if ParamCount<>2 then begin
writeln('Input source filename(*.dbf):');
readln(inf);
writeln('Input destination filename(*.dbf)');
readln(outf);
end else begin
inf:=ParamStr(1);
outf:=ParamStr(2);
end;
//上面这段代码是为了取得要比较的数据库文件名字
Assign(sf,inf);
assign(df,outf);
{$I-}
reset(sf);
if IOResult<>0 then begin
writeln(#07#07,'读源文件出错!');
exit
end;
reset(df);
if IOResult<>0 then begin
writeln(#07,#07,'读目的文件出错!');
exit;
end;
{$I+}
read(sf,read1);
read(df,read2);
if read1<>read2 then begin
writeln('源文件和目的文件的文件类型不一致');
exit;
end else case read1 of
03:writeln('foxbase+, foxpro, dbaseiii+, dbaseiv, no memo ');
$83:writeln('foxbase+, dbaseiii+ with memo ');
$8b:writeln('dbaseiv with memo ');
$8e:writeln('dbaseiv with sql table');
$f5:writeln('foxpro with memo ')
else begin
writeln('不可识别的文件类型');
exit;
end;
end;
seek(sf,8);
seek(df,8);
blockread(sf,fno1,2);//读出文件中文件关的长度
blockread(df,fno2,2);
if fno1<>fno2 then
writeln('两个文件不相同');//由于文件头长度不同所以可以肯定文件不同
fno1:=(fno1-32) div 32;//求文件中的字段数量个数
writeln('文件中的字段数量为',fno1);
seek(sf,32);//将文件指针定位到第一个字段处
seek(df,32);
for i:=1 to fno1 do begin //循环读源文件中的每一个字段信息
blockread(sf,field,32);
writeln('第 ',i,' 个字段名是?,field.field_name);
writeln('第 ',i,' 个字段类型是 ',field.field_type);
writeln('第 ',i,' 个字段长度是 ',field.field_length);
//可以取出其它的信息或将这些信息保存到另外的地方
end;
readln;
close(sf);
close(df);
end.