Delphi XE8中,文件包括:文本文件、有類型數據文件、無類型數據文件。這裡的文件僅指磁盤文件。我們會在接下來的章節中逐步探讨各種文件的操作。本節主要針對适用于所有文件的基本操作過程及函數進行介紹,主要包括:關聯文件、打開文件、關閉文件、删除文件等基本操作。
3.1關聯文件關聯文件是指将文件變量與外部文件之間建立聯系,表示後面在程序中通過文件變量來對文件進行操作。關聯文件的過程定義格式:
procedure AssignFile(var F: File; FileName: String);
其中:
調用該過程時,如果文件名參數為空,文件變量将與标準輸入輸出文件建立關聯。對于已經打開的文件變量,不要再使用該過程調用。
3.2打開文件要進行文件的讀寫操作必須先打開文件。
1.以讀方式打開文件
通過調用 Reset 過程打開一個已經存在的文件。格式:
procedure Reset(var F: File; [RecSize: Word]);
其中:
如果指定的文件不存在,會産生錯誤;如果文件已經打開,則會先關閉文件然後打開。
打開文件後,文件的操作位置設置在文件的開始。
如果文件是空文件,則 Eof(F) 返回值為 True,否則為 False。
2.以寫方式打開文件
通過調用 Rewrite 過程可創建并打開一個新文件。格式:
procedure Rewrite(var F: File; [RecSize: Word]);
參數同 Reset 過程。
如果存在一個同名的文件,則删除原文件後生成新的空文件;如果文件已經打開,則先關閉後重新創建。
打開文件後,文件的操作位置設置在文件的開始。
Eof(F) 返回值一定是 True。
3.3關閉文件當對文件操作完成後,必須調用關閉文件的操作。關閉文件使用 CloseFile 過程,調用該過程後,文件變量與磁盤文件的關聯中斷。格式:
procedure CloseFile(var F: File);
調用該過程後,系統将釋放文件變量并關閉關聯的外部文件。
3.4删除文件當需要删除一個文件時,可以調用 Erase 過程,格式:
procedure Erase(var F: File);
調用該過程将删除與文件變量 F 關聯的文件,在删除文件前會執行關閉文件的操作。
3.5文件的常用基本操作
function IOResult: Integer;
procedure Rename(var F: File; NewName: String);
procedure Rename(var F: File; NewName: PChar);
procedure ChDir(s: Stirng);
function Eof(var F: File): Boolean;
function Eof(var F: Text): Boolean;
procedure GetDir(D: Byte; var S: String);
其中:D表示驅動器,取值為0,1,2,3...,分别代表A,B,C,D,...;
procedure RmDir(s: Stirng);
procedure MkDir(s: String);
function DeleteFile(const FileName:string):Boolean;
示例:編寫一個簡單的文件管理器,界面如下圖:
新建目錄界面:
重命名界面:
本例涉及三個窗體:
主窗體主要組件的屬性設置如下:
對象 |
屬性 |
屬性值 |
說明 |
DriveComboBox1 |
DirList |
DirectoryListBox1 |
鍊接到DirectoryListBox1 |
DirectoryListBox1 |
FileList |
FileListBox1 |
鍊接到FileListBox1 |
DirLabel |
Label1 |
鍊接到Label | |
FilterComboBox1 |
FileList |
FileListBox1 |
鍊接到FileListBox1 |
FileListBox1 |
MultiSelect |
False |
單選 |
Button1 |
Caption |
新建目錄 |
标題 |
Button2 |
Caption |
删除目錄 |
标題 |
Button3 |
Caption |
删除文件 |
标題 |
Button4 |
Caption |
重命名 |
标題 |
代碼如下:
主窗體代碼:
uses Unit2, Unit3;
procedure TForm1.Button1Click(Sender: TObject);
begin
// 新建目錄
if Form2.ShowModal = mrOk then
DirectoryListBox1.Update;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
DirName: String;
i: Integer;
begin
// 删除目錄
for i := 0 to DirectoryListBox1.Items.Count - 1 do
begin
if DirectoryListBox1.Selected[i] then
begin
DirName := DirectoryListBox1.Items.Strings[i];
RmDir(DirName);
end;
end;
DirectoryListBox1.Update;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
FileName: String;
i: Integer;
begin
// 删除文件
for i := 0 to FileListBox1.Items.Count - 1 do
begin
if FileListBox1.Selected[i] then
begin
FileName := FileListBox1.Items.Strings[i];
FileName := DirectoryListBox1.Directory '\' FileName;
DeleteFile(FileName);
end;
end;
FileListBox1.Update;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
FileName: String;
i: Integer;
begin
// 重命名
for i := 0 to FileListBox1.Items.Count - 1 do
begin
if FileListBox1.Selected[i] then
begin
FileName := FileListBox1.Items.Strings[i];
end;
end;
if FileName <> '' then
Form3.FileName := FileName;
if Form3.ShowModal = mrOk then
FileListBox1.Update;
end;
新建目錄窗體代碼:
procedure TForm2.Button1Click(Sender: TObject);
begin
// 取消按鈕
ModalResult := mrCancel;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
// 确定按鈕,在當前目錄下創建目錄
if Edit1.Text = '' then
ShowMessage('請輸入目錄名')
else
begin
MkDir(Edit1.Text);
ModalResult := mrOk;
end;
end;
重命名窗體代碼:
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm3 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
FileName: String;
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
begin
// 取消
ModalResult := mrCancel;
end;
procedure TForm3.Button2Click(Sender: TObject);
var
F: File;
begin
// 确定
if Edit1.Text = '' then
ShowMessage('請輸入新的文件名!')
else
begin
AssignFile(F, FileName);
Rename(F, Edit1.Text);
end;
ModalResult := mrOk;
end;
在重命名窗體中,interface 部分類 TForm3 中定義了一個公共屬性:FileName: String; 用于在調用該窗體時傳遞要重命名的文件名,在主窗體中調用 TForm3 時的代碼:
Form3.FileName := FileName;
if Form3.ShowModal = mrOk then
FileListBox1.Update;
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!