首页
/
每日頭條
/
科技
/
編程操作
編程操作
更新时间:2025-11-29 13:20:39
3.文件編程

Delphi XE8中,文件包括:文本文件、有類型數據文件、無類型數據文件。這裡的文件僅指磁盤文件。我們會在接下來的章節中逐步探讨各種文件的操作。本節主要針對适用于所有文件的基本操作過程及函數進行介紹,主要包括:關聯文件、打開文件、關閉文件、删除文件等基本操作。

3.1關聯文件

關聯文件是指将文件變量與外部文件之間建立聯系,表示後面在程序中通過文件變量來對文件進行操作。關聯文件的過程定義格式:

procedure AssignFile(var F: File; FileName: String);

其中:

  • F - 表示文件變量,可以是各種類型的文件;
  • FileName - 字符串類型的變量,表示某個特定的文件名;

調用該過程時,如果文件名參數為空,文件變量将與标準輸入輸出文件建立關聯。對于已經打開的文件變量,不要再使用該過程調用。

3.2打開文件

要進行文件的讀寫操作必須先打開文件。

1.以讀方式打開文件

通過調用 Reset 過程打開一個已經存在的文件。格式:

procedure Reset(var F: File; [RecSize: Word]);

其中:

  • F - 表示文件變量;
  • RecSize - 記錄長度,當文件為無類型文件時才使用,指定數據傳送時的大小;

如果指定的文件不存在,會産生錯誤;如果文件已經打開,則會先關閉文件然後打開。

打開文件後,文件的操作位置設置在文件的開始。

如果文件是空文件,則 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文件的常用基本操作
  • 獲取最近一次IO操作的狀态值

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;

3.6文件編程示例

示例:編寫一個簡單的文件管理器,界面如下圖:

編程操作(9.鍵盤鼠标和文件編程)1

新建目錄界面:

編程操作(9.鍵盤鼠标和文件編程)2

重命名界面:

編程操作(9.鍵盤鼠标和文件編程)3

本例涉及三個窗體:

主窗體主要組件的屬性設置如下:

對象

屬性

屬性值

說明

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;

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
科技木皮是什麼材料做的
科技木皮是什麼材料做的
科技木皮是什麼材料做的?科技木皮屬于再生性的貼皮木材,是在天然木材的基礎上制作的其實就是将原木進行深加工而成,這個加工過程是從設計、染色、再構造、除蟲後,再經過高溫高壓生成,這樣處理後的科技木皮,木材紋理更加豐富、漂亮,而且表面光滑無結疤,...
2025-11-29
陰陽師白藏主技能詳細介紹
陰陽師白藏主技能詳細介紹
作為勾玉來源之一,每周的競速/百戰秘聞本是必做的周常了,而除了通關的勾玉獎勵外,還有排行榜的勾玉和藍票獎勵也是一大收入了,這周的紅葉競速秘聞算是難度比較低的,不過特殊機制減暴擊還是比較煩的,這裡就來給大家推薦一套在當前版本比較适用的通關陣容...
2025-11-29
火炬之光3在steam叫什麼
火炬之光3在steam叫什麼
昨日(6月14日)《火炬之光3》在Steam上推出搶先體驗版,遊戲售價160元,支持中文。目前Steam頁面上有1692個評測。總評為“多半差評”,好評率隻有35%。許多玩家表示中國區服務器差勁,根本連不上。Steam商店頁面:《火炬之光2...
2025-11-29
oppor9s強制解鎖圖案鎖
oppor9s強制解鎖圖案鎖
oppor9s強制解鎖圖案鎖?進入恢複模式的兩種方法:長按電源鍵,待到一個彈窗出來,現在小編就來說說關于oppor9s強制解鎖圖案鎖?下面内容希望能幫助到你,我們來一起看看吧!oppor9s強制解鎖圖案鎖進入恢複模式的兩種方法:長按電源鍵,...
2025-11-29
40萬跑分主機配置清單
40萬跑分主機配置清單
老鐵們,好久不見,最近顯卡顯卡回暖,電腦行情價格也相對穩定了,今天呢就給大家帶來一套簡簡單單的4000元預算遊戲主機搭配方案。此配置推薦小白入門電腦搭配,大神愛折騰的老玩家勿噴,謝謝話不多說吧,咱們直接上配置配件名稱品牌型号參考格CPU英特...
2025-11-29
Copyright 2023-2025 - www.tftnews.com All Rights Reserved