1. 程式人生 > >Delphi檔案操作-讀檔案-寫檔案-操作檔案

Delphi檔案操作-讀檔案-寫檔案-操作檔案

本例子幾個變數的說明
TFileRec = record   //記錄定義
Day : Integer;
...          //其他定義
end;
f : File of TFileRec;    //標準的輸入/輸出檔案
FilRec : TFileRec;      //記錄資料
FileName ;               //記錄檔案的名稱
關於記錄檔案的相關操作
(1)記錄檔案的開啟 
(2)記錄檔案的讀入和顯示
(3)記錄的增加
(4)記錄的刪除
(5)記錄的修改
(6)記錄檔案的刪除

1、記錄檔案的開啟
需要使用的方法:
AssingFile(f,FileName):
Reset(f):        //開啟一個已經存在的記錄檔案
Rewrite(f);         //新建立一個記錄檔案
FileSize(f);       //返回記錄檔案記錄個數


procedure OpenRecFile(const FileName : string; var f : TFileRec);
begin
  AssingFile(f, FileName):
  try
    Reset(f);
  except //開啟檔案出現異常的處理
    On EInOutError do
    begin
      try
        if FileExists(FileName) = False then //如果檔案不存在,建立
          ReWrite(MethodFile);
        else //檔案存在,但是打不開,表示這個檔案有問題
          MessageDlg('檔案不能開啟', mtWarning, [mbOK], 0);
      except //建立新檔案的時候出現異常的處理
        On EInOutError do
          MessageDlg('檔案不能建立', mtWarning, [mbOK], 0);
      end;
    end;

  end;
end;

2、記錄檔案的讀入
需要使用的方法

Read(f, FileRec);


procedure ReadData_FromRecFile;
begin
  for i := 1 to FileSize(f) do
  begin
    Read(f, FileRec);
    ... //其他的處理(比如記錄的顯示等等)
  end;
end;

3、記錄的增加
需要使用的方法 
Seek(f, RecNo);   //RecNo代表要定位置的記錄編號
Write(f, FileRec)
基本思路:
獲取指定記錄的位置,並把該位置後的記錄逐個向後移動

(1)在檔案的尾部增加記錄
procedure InsertData_AtRecFile_Last(const Data : TFileRec);   //需要插入的資料
begin
  Seek(f,  FileSize(f));
  Write(f, Data);
end;
(2)在檔案的指定位置前增加記錄
procedure InsertData_AtRecFile(const Index : Integer);   //索引號
const Data : TFileRec;   //需要插入的資料
var
  nI : Integer;
begin
  if (Index > FileSize(f)) or (Index < 0) then
    Exit;
  for nI := FileSize(f) - 1 downto Index do
  begin
    seek(f, nI);
    read(f, FileRec);
    Seek(f, nI + 1);
    Write(f, FileRec);
  end;
  Seek(f, Index);
  Write(f, Data);
end;
4、記錄的刪除


需要使用的方法 
Seek(f, Index);   //Index代表要定位置的記錄編號
Write(f, FileRec)
Truncate(f) ;   //刪除指定索引號之後的索引檔案
基本思路:
獲取指定位置,並把該位置後的記錄逐個向前移動。 檔案在最後一條記錄前截斷。

(1)刪除指定索引號的記錄
procedure DeleteData_FromRecFile(const Index : Integer);
var
  nI : Integer;
begin
  if (Index < 0) or (FileSize(f) = 0) then
    Exit;
  for nI := Index + 1 to FileSize(f) - 1 do
  begin
    seek(f, nI);
    read(f, FileRec);
    seek(f, nI - 1);
    Write(f, FileRec);
  end;
  Seek(f, FileSize(f) - 1);   //截斷最後一條記錄
  Truncate(f);
end;
5、記錄的修改
procedure ModifyData_AtRecFile(const Index : Integer; const Data : TFileRec);
begin
  if (Index < 0) or (FileSize(f) = 0) or (Index > FileSize(f) - 1) then
    Exit;
  Seek(f, Index);
  Write(f, Data);
end; 
6、記錄檔案的關閉
CloseFile(f);