以下是一个记录文件的读与写操作,对应的删除操作应该怎么写,请各位高手出招!!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;

解决方案 »

  1.   

    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;
      

  2.   

    兄弟,告诉你,没有真正的方法,但是可以绕过去的:
    1。多定义一个字段,如“IsDel=Boolean;”,然后确定删除的设置为TRUE,重新保存一下。
    2。重新建一个监时文件,将不删除的记录导到这个文件中,然后再删除原始记录文件,临时文件重命名为记录文件名。