檔案是同一種類型元素的有序集合,是記憶體與外設之間傳輸資料的渠道。檔案的本質是一個資料流,所有的檔案實際上是一串二進位序列。
檔案管理包括:1、檔案操作。2、目錄操作。3、磁碟機操作。三部分。
1、常見檔案操作函數和過程。
1.1、AssignFile過程
作用:將一個外部檔案的檔案名稱與一個File類型的變數關聯,並對變數進行初始化。
原型:procedure AssignFile(var F; FileName: String);
F:一個File類型的變數,可以是任何資料類型。
FileName:外部檔案的檔案名稱。
1.2、FileExists函數
作用:用於測試指定檔案名稱的檔案是否存在。
原型:function FileExists(const FileName: String): Boolean;
FileName:檔案名稱。字串類型。
注意:如果檔案存在,返回True;否則,返回False。
1.3、Append過程
作用:為在一個已經存在的檔案末尾添加文本做好準備工作。檔案是唯寫方式開啟的。
原型:procedure Append(var F: Text);
F: 一個TextFile類型變數。
注意:這是一個對文本類型檔案操作的過程。其中變數F必須和外部檔案關聯。如果F沒有與外部檔案關聯,將拋出異常。如果F已經處於開啟狀態,則過程會關閉F並重新開啟。檔案指標位置將被設定在檔案末尾。
1.4、Reset過程
作用:對於文字檔,Reset過程將以唯讀方式開啟檔案。對於類型檔案和無類型檔案,Reset過程將以可讀寫方式開啟檔案。
原型:procedure Reset(var F [: File; RecSize: Word ] );
F:File類型變數,可以是任何檔案類型。
RecSize:檔案的大小。它是一個可選的選項,只有當F為無類型檔案時才可以被指定。如果F為無類型檔案,則RecSize指定了在資料轉送過程中使用的記錄的大小。如果參數RecSize被省略了,則預設的記錄大小為128位元組。
注意:當該過程開啟檔案時,如果檔案不存在則產生異常。如果檔案已經開啟了,則先關閉檔案,然後重新開啟,並將檔案指標放到檔案開頭處。預設的檔案模式 (FileMode)為2,即可讀寫入模式。如果檔案模式在調用Reset過程前都還未改變,則嘗試開啟一個唯讀檔案會失敗。當調用Reset過程後,如果檔案為空白,則Eof函數返回True,否則返回False。
1.5、Rewrite過程
作用:對於一個已存在的檔案,此操作將使檔案被覆蓋。對於一個不存在的檔案,將建立並開啟檔案。對於一個已開啟的檔案,則關閉檔案,並重新建立一個新的檔案(覆蓋原有的)。檔案指標也被設定到空檔案的開頭處。
原型:procedure Rewrite(var F: File [; Recsize: Word ] );
F:File類型變數,可以是任何檔案類型。
RecSize:檔案的大小。它是一個可選的選項,只有當F為無類型檔案時才可以被指定。如果F為無類型檔案,則RecSize指定了在資料轉送過程中使用的記錄的大小。如果參數RecSize被省略了,則預設的記錄大小為128位元組。
注意:如果F被指定為一個空的檔案名稱,如:AssignFile(F, ‘’),那麼當Rewrite過程被調用時,F為標準的輸出檔案。如果F是文字檔,則F為唯寫模式。當調用Rewrite過程後,Eof(F)將總是為True。
1.6、Flush函數
作用:用於清空以輸出方式開啟的文本緩衝區,保證所有寫入的字元全部寫入外部檔案。
原型:function Flush(var t: Text): Integer;
F:F是文本類型變數。
注意:本函數只使用於文字檔的處理。當操作成功時,Flush返回0,否則,它將返回錯誤碼。當使用Rewrite過程或者Append過程開啟一個文字檔用來輸出時。Flush函數用於清空檔案的緩衝區。這個過程保證了緩衝區的中的所有字元都已經寫入外部檔案中。對於因為輸入而開啟的檔案,Flush函數不起任何作用。
1.7、Read過程
作用:用於從一個檔案中讀取資料。
原型:procedure Read(F , V1 [, V2,...,Vn ] );
procedure Read( [ var F: Text; ] V1 [, V2,...,Vn ] );
F:是一個檔案變數。
V1……Vn:用於儲存從檔案中讀取的資料。
注意:在Delphi中,Read過程有兩種文法,如果參數F是一個有類型檔案,過程Read讀取一組資料到一個變數中。如果參數F是一個文字檔變數,過程Read讀取一個或多個值到一個或多個變數中。
1.8、ReadLn過程
作用:用於從檔案中讀取一行文本。
原型:procedure ReadLn([ var F: Text; ] V1 [, V2, ...,Vn ]);
V:文字檔變數。
V1……V2:用於儲存讀取的文本。
注意:在Delphi中,ReadLn過程用於讀取文字檔的一行文本,並跳至該文字檔的下一行。
1.9、Write過程
作用:用於向一個文字檔寫入資料。
原型:procedure Write( [var F: Text; ] P1 [ , P2,..., Pn] ); //文本類型檔案
procedure Write(F, V1,…Vn); //有類型檔案
F:文字檔比變數。
P1……Pn:代表向檔案中寫入的資料。
注意:對於文字檔來說,寫入的內容應String類型變數。對於有類型檔案來說,寫入的必須是某種特定類型的資料。
1.10、WriteLn過程
作用:用來向文字檔中添加一行內容,即在寫入內容後面有斷行符號分行符號。
原型:procedure WriteLn([ var F: Text; ] P1 [, P2, ...,Pn ] );
F:文字檔比變數。
1.11、Eof函數
作用:用於判斷是否到了檔案的結尾。
原型:function Eof(var F): Boolean; //用於類型檔案和無類型檔案
function Eof [ (var F: Text) ]: Boolean; //用於文字檔
典型應用:如果檔案為空白或當前位置在最後一個字元後,則返回True;否則,返回False。
1.12、Eoln函數
作用:測試檔案指標是否指向一行的最後,適用於文字檔。如果當前的位置在一行的末尾或Eof(F)函數返回的是True,則Eoln返回的是True;否則返回False。
原型:function Eoln [(var F: Text) ]: Boolean;
典型應用:在程式中對文字檔進行操作時,有時需要限制資料的讀取。如果唯讀取一行中某個位置到一行結束的部分資料。程式中可以使用Eoln函數進行判斷。
1.13、CloseFile過程
作用:用來關閉檔案,同事將檔案記錄盤上的檔案與相關檔案變數斷開聯絡。
原型:procedure CloseFile(var F);
F:一個檔案類型變數
注意:通常來說,CloseFile過程與try…finally…模組結合使用。
1.14、DeleteFile函數
作用:將一個檔案從屬記錄盤上刪除。
原型:function DeleteFile(const FileName: string): Boolean;
注意:如果檔案不存在或無法刪除,返回False;否則,返回True。
1.15、Erase過程
作用:用於刪除一個已存在的檔案。
原型:procedure Erase(var F);
注意:如果檔案被開啟,先關閉檔案再執行刪除操作。
1.16、FileGetAttr函數
作用:用於擷取一個檔案的屬性設定。
原型:function FileGetAttr(const FileName: string): Integer;
注意:具體傳回值代碼參考說明。
下面我們來總結一下Delphi中檔案操作流程。Delphi中把檔案分為3種:文字檔、類型檔案和無類型檔案。文字檔指可以被任意檔案編輯器讀取的ASCII檔案。類型檔案包含由程式員定義的資料類型的檔案。無類型檔案包含了其他所有的檔案類型。
1、文字檔
Step 1 調用AssignFile()將檔案變數與一個關聯起來。如:
AssignFile(MyTextFile,’TextFile.txt’);
Step 2 開啟檔案。有三種開啟檔案的方式:1.Rewrite過程建立並開啟檔案,對於一個已經存在的檔案,此操作將使檔案被覆蓋;2.使用Reset過程唯讀地開啟一個檔案;3.使用Append過程向已經存在的文字檔追加文本。
Step 3 對檔案進行操作。如Write或Read操作。
Step 4 使用CloseFile來關閉一個已經開啟的檔案。
下面是一個文字檔操作的樣本。
例1:
複製內容到剪貼簿
代碼:
procedure TForm1.Button1Click(Sender: TObject);
var
MyTextFile: TextFile; //定義變數MyTextFile為文字檔類型
begin
(*步驟1,將檔案變數與外部檔案聯絡。相當於為外部檔案找了個“替身”*)
AssignFile(MyTextFile, ‘TextFile.txt’);
(*判斷操作的檔案是否存在,不存在則建立檔案。*)
if FileExists(‘TextFile.txt’) then
(*步驟2,開啟檔案,不過在開啟前,最好進行檔案是否存在的判斷。*)
Append(MyTextFile)
else
Rewrite(MyTextFile);
try
(*步驟3,對檔案進行操作。*)
WrtieLn(MyTextFile, ‘在檔案末尾添加的文字!’);
Flush(MyTextFile); //清空緩衝區,確保字串已經寫入檔案之中。
finally
(*步驟4,關閉開啟的檔案,CloseFile常與try…finally搭配,用於回收資源 *)
CloseFile(MyTextFile);
end;
end;
2、類型檔案
Step 1 定義資料結構
Step 2 調用AssignFile()將檔案變數與一個類型檔案關聯起來。
Step 3 開啟類型檔案。
Step 4 對類型檔案進行操作。
Step 5 關閉已經開啟的檔案。
下面例子示範了類型檔案的操作。
例2:
複製內容到剪貼簿
代碼:
(*步驟1,定義資料結構。*)
type
TPerson = record
Name: string[20];
Sex: string[4]
Age: Integer;
End;
procedure TForm1.Button1Click(Sender: TObject);
var
PersonFile: file of TPerson; //聲明PersonFile變數為TPerson類型檔案
Person: TPerson;
begin
(*步驟2,關聯檔案。*)
AssignFile(PersonFile, ‘Person.dat’);
(*步驟3,開啟檔案。 *)
Reset(PersonFile);
try
While not Eof(PersonFile) do
(*步驟4,對檔案進行操作。*)
begin
Read(PersonFile, Person);
Memo1.Lines.Add(Person.Name);
Memo1.Lines.Add(Person.Sex);
Memo1.Lines.Add(IntToStr(Person.Age));
end;
finally
(*步驟5,關閉檔案。*)
CloseFile(PersonFile);
end;
end;