程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 第六章-文件管理(二)(3)

第六章-文件管理(二)(3)

編輯:Delphi

6.3.2 文件名浏覽查找系統的設計思路 

作為文件控件的應用實例,我們開發了一個簡單的文件名浏覽查找系統。這個系統可用於文件名的顯示,把選中的文件寫入列表框,並能按文件編輯框中輸入的通配符對文件進行查找。

表6.5 部件的設計

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

部件 屬性 功能

─────────────────────────────────────

FileCtrForm Position=poDefault 主窗口

DirLabel 顯示當前目錄

FileEdit TabOrder=0 顯示當前文件/輸入文件顯示匹配符

FileListBox1 FileEdit=FileEdit 顯示當前目錄文件

DirectoryListBox1 DirLabel=DirLabel 顯示當前驅動器目錄

FileList= FileListBox1

DriveComboBox1 DirList= DirectoryListBox1 選擇當前驅動器

FilterComboBox1 FileList=FileListBox1 選擇文件顯示類型

Filter='All Files(*.*)|*.*|

Source Files(*.pas)|*.pas|

Form Files(*.dfm)|*.dfm|

Project Files(*.dpr)|*.dpr'

ListBox1 顯示選中或查找的文件

Button1 Caption='查找' 按 FileEdit 中的內容進行查找

Button2 Caption='退出' 退出系統

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6.3.3 文件名浏覽查找系統的功能和實現 

6.3.3.1 按指定後綴名顯示當前目錄中的文件 

實現這一功能只需要在控件間建立正確的聯系即可,不需要代碼支持。建立聯系的方法如(6.3.1)中的介紹。 

6.3.3.2 把選中的文件添加到列表框中 

在FileListBox1的OnClick事件中: 

procedure TFileCtrForm.FileListBox1Click(Sender: TObject);

begin

if Searched then

begin

Searched := False;

ListBox1.Items.Clear;

Label5.Caption := 'Selected Files';

end;

if NotInList(ExtractFileName(FileListBox1.FileName),ListBox1.Items) then

ListBox1.Items.Add(ExtractFileName(FileListBox1.FileName));

end;

Searched是一個全局變量,用於標明ListBox1當前顯示內容是查找的結果還是從FileListBox1中選定的文件。

函數NotInList用於判斷待添加的字符串是否已存在於一個TStrings對象中。函數返回一個布爾型變量。

NotInList的具體實現如下。 

Function TFileCtrForm.NotInList(FileName: String;Items: TStrings): Boolean;

var

i: Integer;

begin

for I := 0 to Items.Count-1 do

if Items[i] = FileName then

begin

NotInList := False;

Exit;

end;

NotInList := True;

end; 

6.3.3.3 按指定匹配字符串顯示當前目錄中的文件 

當在FileEdit中輸入一個匹配字符串,並回車,文件列表框將顯示匹配結果。這一功能在FileEdit的OnKeyPress事件中實現。 

procedure TFileCtrForm.FileEditKeyPress(Sender: TObject; var Key: Char);

begin

if Key = #13 then

begin

FileListBox1.ApplyFilePath(FileEdit.Text);

Key := #0;

end;

end;

文件列表框提供的ApplyFilePath方法是解決這一問題的關鍵所在。 

6.3.3.4 按指定匹配字符串查找當前目錄中的文件 

為了進行比較,我們用另一種方法來實現文件的查找功能,即利用標准過程FindFirst、FindNext。FileList1與ListBox1 中的內容完全一致。

當用戶單擊“查找”按鈕時,與FileEdit 中字符串相匹配的文件將顯示在ListBox1中。下面是實現代碼。 

procedure TFileCtrForm.Button1Click(Sender: TObject);

var

i: Integer;

SearchRec: TSearchRec;

begin

Searched := True;

Label5.Caption := 'Search Result';

ListBox1.Items.Clear;

FindFirst(FileEdit.text,faAnyFile,SearchRec);

ListBox1.Items.Add(SearchRec.Name);

Repeat

i := FindNext(SearchRec);

If i = 0 then

ListBox1.Items.Add(SearchRec.Name);

until i <> 0;

end;

SearchRec是一個TSearchRec類型的記錄。TSearchRec的定義如下: 

TSearchRec = record

Fill: array[1..21] of Byte;

Attr: Byte;

Time: Longint;

Size: Longint;

Name: string[12];

end;

  在這一結構中提供了很多信息,靈活應用將給編程帶來很大方便。下面我們舉幾個例子。

1. 檢測給定文件的大小。 

function GetFileSize(const FileName: String): LongInt;

var

SearchRec: TSearchRec;

begin

if FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec) = 0 then

Result := SearchRec.Size

else

Result := -1;

end; 

這一程序將在下一節中應用。

2. 獲取給定文件的時間戳,事實上等價於FileAge函數。 

function GetFileTime(const FileName: String): Longint;

var

SearchRec: TSearchRec;

begin

if FindFirst(ExpandFileName(FileName),faAnyFile, SearchRec) = 0 then

Result := SearchRec.Time

else

Result := -1;

end; 

3. 檢測文件的屬性。如果文件具有某種屬性,則 

SearchRec.Attr And GivenAttr > 0 

屬性常量對應的值與意義如下表: 

表6.6 屬性常量對應的值與意義

━━━━━━━━━━━━━━━━━━━━

常量 值 描述

─────────────────────

faReadOnly $01 只讀文件

faHidden $02 隱藏文件

faSysFile $04 系統文件

faVolumeID $08 卷標文件

faDirectory $10 目錄文件

faArchive $20 檔案文件

faAnyFile $3F 任何文件

━━━━━━━━━━━━━━━━━━━━ 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved