记录文件问题?(100分)

  • 主题发起人 主题发起人 lwluser
  • 开始时间 开始时间
L

lwluser

Unregistered / Unconfirmed
GUEST, unregistred user!
type
TServerInfo=record
Host:String[128];
Ip:String[15];
Port:Integer;
end;

var
Server:TServerInfo;
fServer:file of TServerInfo;
begin
AssignFile(fServer,'ServerList.dat');
if FileExists('ServerList.dat') then
reset(fServer)
else
rewrite(fServer);

怎么样可以删除其中的某一个记录?
 
另外创建一个该类型的文件,从源文件中逐条读入记录并写进新创建的文件中,读写过程中跳过
要删除的记录即可。
 
1. 记录文件的删除
type
TServerInfo=record
Host:String[128];
Ip:String[15];
Port:Integer;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Server:TServerInfo;
fServer:file of TServerInfo;
begin
AssignFile(fServer,'d:/ServerList.dat');
if FileExists('d:/ServerList.dat') then
reset(fServer)
else
rewrite(fServer);
//添加三条
Server.ip:='12.34.56.78';
server.Host :='aaaaaaaaaaa';
server.Port :=80;
write(fserver,server);
server.Host :='bbbbbbbb';
write(fserver,server);
server.Host :='cccccccccccc';
write(fserver,server);
closeFile(fServer);
end;

function DelRecNo(FileName:string;RecNo:Integer):Boolean;
//删除第 RecNo条,第一条为 0
var
Svr:TServerInfo;
f:file of TServerInfo;
n,i:integer;
begin
Result:=false;
if not(FileExists(FileName)) then exit;
AssignFile(f,FileName);
FileMode:=2;
reset(f);
n:=fileSize(f);
if (RecNo>=n) or (RecNo<0) then
begin
closeFile(f);
exit;
end;
for i:=n-1 downto RecNo+1 do
begin
seek(f,i);
Read(f,svr);
seek(f,i-1);
write(f,svr);
end;
seek(f,n-1);
Truncate(f);
closeFile(f);
Result:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
delRecNo('d:/ServerList.dat',1); //删除第二条
end;
 
接受答案了.
 
后退
顶部