以下是一个记录文件的读与写操作,对应的删除操作应该怎么写,请各位高手出招!!type
Student = record
FirstName, LastName: string[20];
PhoneNumber: string[15];
PostCode: Integer;
Birthday: TDate;
end;
StudentList = file of Student;
//写记录
procedure TForm1.Button1Click(Sender: TObject);
var
sss: TFileStream;
s: Student;
begin
sss := TFileStream.Create('c:\a.pdb', fmOpenWrite or fmCreate);
try
sss.Seek(0, soFromEnd);
s.FirstName := 'FirstName';
s.LastName := 'LastName';
s.PhoneNumber := '123456';
s.PostCode := 123456;
s.Birthday := Date;
sss.Write(s, sizeof(s));
finally
sss.Free;
end;
end;
//读记录
procedure TForm1.Button2Click(Sender: TObject);
var
sss: TFileStream;
s: Student;
numread: Integer;
x: StudentList;
begin
sss := TFileStream.Create('c:\a.pdb', fmOpenRead);
try
while True do
begin
numread := sss.Read(s, sizeof(s));
if numread <> sizeof(s) then break;
showmessage(s.firstname + #13 + s.LastName + #13 +
s.PhoneNumber +#13+
inttostr(s.PostCode)+#13+
datetostr(s.birthday)); end;
finally
sss.Free;
end;
end;
Student = record
FirstName, LastName: string[20];
PhoneNumber: string[15];
PostCode: Integer;
Birthday: TDate;
end;
StudentList = file of Student;
//写记录
procedure TForm1.Button1Click(Sender: TObject);
var
sss: TFileStream;
s: Student;
begin
sss := TFileStream.Create('c:\a.pdb', fmOpenWrite or fmCreate);
try
sss.Seek(0, soFromEnd);
s.FirstName := 'FirstName';
s.LastName := 'LastName';
s.PhoneNumber := '123456';
s.PostCode := 123456;
s.Birthday := Date;
sss.Write(s, sizeof(s));
finally
sss.Free;
end;
end;
//读记录
procedure TForm1.Button2Click(Sender: TObject);
var
sss: TFileStream;
s: Student;
numread: Integer;
x: StudentList;
begin
sss := TFileStream.Create('c:\a.pdb', fmOpenRead);
try
while True do
begin
numread := sss.Read(s, sizeof(s));
if numread <> sizeof(s) then break;
showmessage(s.firstname + #13 + s.LastName + #13 +
s.PhoneNumber +#13+
inttostr(s.PostCode)+#13+
datetostr(s.birthday)); end;
finally
sss.Free;
end;
end;
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;
1。多定义一个字段,如“IsDel=Boolean;”,然后确定删除的设置为TRUE,重新保存一下。
2。重新建一个监时文件,将不删除的记录导到这个文件中,然后再删除原始记录文件,临时文件重命名为记录文件名。