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

Delphi管理文件數量,文件管理器制作教程

編輯:Delphi

Delphi編寫一個文件數量管理的小程序,主要使用BitBtn 控件、Edit 控件、Panel 控件、DriveComboBox 和DirectoryListBox 等控件來實現。Delphi 6.0 中帶有強大的文件管理功能,主要的文件類型控件包括DriveComboBox、DirectoryListBox、FilterComboBox 和FileListBox 四種控件,這四種控件常常綜合使用,通過調用文件處理的函數,可以對文件和目錄進行各種操作。這四個控件的作用如下:DriveComboBox 控件的作用是顯示當前計算機中全部有效的驅動器,以供用戶選擇和操作;DirectoryListBox 控件的作用是顯示當前計算機有效驅動器中當前驅動器的樹形目錄結構,以供用戶選擇和操作;FileListBox 控件的作用是顯示當前路徑中符合條件的所有文件列表;FilerListBox 控件的作用是為用戶提供從文件列表框中篩選文件的條件。但要實現統計功能,還必須和查找文件函數結合起來運用。

程序運行界面效果:

Delphi管理文件數量

具體設計步驟:

因為程序主要解決對文件和文件夾的統計功能,這必須和查找文件函數結合起來使用,我們需要用到Tree 和File 所關聯的函數。Delphi 提供的相關函數統計出文件所占大小,是以字節為單位的,因為多數時候統計出的結果是很大的,這時用字節表示將是一個很大的數字。我們需要將其轉換為K 和M為大小的單位。這需要用IF 語句進行判斷,當文件大小大於1M 時,我們用M 做單位,當小於1M 時,只需用K 做單位即可。

1.新建工程:

(1)啟動Delphi 6.0 程序。選擇“文件”菜單下的“新建”命令,從彈出的子菜單中選擇Application 選項,則出現新建工程的Form1 窗口。

(2)選擇“文件”菜單下的“工程另存為”命令,彈出Save Unit1 As 對話框。在“保存在”列表框中選擇需要存放該窗口文件所在的目錄名;在“文件名”編輯框中填寫文件名,這裡填寫“Unit1”,點擊“保存”按鈕,保存上面的選項。

(3)執行上一步後,將彈出“工程另存為”對話框。在“保存在”列表框中選擇需要存放該工程的目錄名,最好和第(2)步選取相同的目錄;在“文件名”編輯框中填寫保存處理該工程的源代碼的文件名,這裡填寫“Project1”,點擊“保存”按鈕,保存上面的選項。

2.修改窗口:

(1)激活Form1 窗口,在“屬性”面板中設置該窗體的Caption 屬性為“統計文件數目和大小”,Color 屬性設置為“clSkyBlue”。

(2)選擇“標准”頁上的Panel 選項,在窗體中添加3 個Panel 控件,調整其合適的大小和位置。

(3)選擇“附加”頁上的BitBtn 選項,在窗體中添加BitBtn 控件,調整其合適的大小和位置。在“屬性”面板上設置其Caption 屬性分別為“查找”和“退出”。選中“查找”BitBtn,在“屬性”面板上Glyph 屬性右邊的文本框中點擊圖標,打開“圖畫編輯器”對話框。點擊對話框中的“加載”按鈕,從彈出的對話框中選擇合適的圖標文件,點擊“確定”按鈕確定為該BitBtn 控件添加的圖標。

(4)按照步驟(3)的操作為“退出”按鈕添加圖標。

(5)選擇Win 3.1 頁上的DirectoryListBox 選項,在窗體中一個面板上添加DirectoryListBox 控件,調整其合適的大小和位置。在“屬性”面板上設置其Color 屬性均為“clMoneyGreen”,Font.Color 屬性為“clBlue”,Align 屬性設置為“alClIEnt”,使其占據整個面板。

(6)選擇Win 3.1 頁上的DriveComboBox 選項,在窗體中添加DriveComboBox 控件,在“屬性”面板上設置其Color 屬性為“clMoneyGreen”,Font.Color 屬性為“clBlue”。

(7)選擇“文件”菜單下的“新建”命令,從彈出的子菜單中選擇Form 選項,新建一個窗體Form2,作為統計結果的窗體。在“屬性”面板上設置其Color 屬性為“clSkyBlue”,Caption 屬性為“統計結果”。

(8)選擇“標准”頁上的Label 選項,在窗體中添加三個Label 控件,分別調整其合適的大小和位置。在“屬性”面板上設置其Color 屬性為“clSkyBlue”,Font.Color 屬性為“clBlue”,Caption 屬性分別為“浏覽的目錄數”、“浏覽的文件數”和“文件字節大小”。

(9)選擇“標准”頁上的Edit 選項,在窗體中添加三個Edit 控件,分別調整其合適的大小和位置。在“屬性”面板上設置其Color 屬性均為“clMoneyGreen”,Font.Color屬性均為“clBlue”。Name 屬性分別為“Name1”、“Name2”和“Name3”。

(10)選擇“標准”頁上的Button 選項,在窗體中添加一個Button 控件,調整其合適的大小和位置。在“屬性”面板上設置其Caption 屬性為“返回”。

關鍵的代碼分析:

(1)雖然DriveComboBox 可以提供所要浏覽的文件所在的驅動器,可以統計任意驅動器內的文件,而DirectoryListBox 則可以提供所要浏覽的文件所在的文件夾,不過要想擁有一定的統計功能,還必須和查找文件函數結合起來運用,因此我們要定義一個函數,使得具有統計功能,函數定義如下:

procedure TForm1.MakeTree;
var Sr : TSearchRec;
Err : integer;
TrSize, FilePath : string;
Begin
Err:=FindFirst(’*.*’,$37,Sr) ; //查找符合條件的第一個文件
While (Err = 0) do
begin
if Sr.Name[1]<>’.’ then
begin
FilePath:=ExpandFileName(Sr.Name); //設置查找文件路徑
TreeSize:=TreeSize+Sr.Size;
TrSize:=FloatToStr(TreeSize); //將Float 類型轉換成Str 類型
Form1.Caption:=DirectoryListBox1.Directory+’ ’+IntToStr(TreeCount)
+’ files and folders Size: ’+TrSize;
//改變窗體名,動態顯示查詢過程
if (Sr.Attr and faDirectory)=0 then //文件查找結束時
begin
FilesSize:=FilesSize+Sr.Size; //統計文件所占磁盤空間大小
inc(FilesCount);
end;
inc(TreeCount);
end;
If ((Sr.Attr and faDirectory)<>0)AND(Sr.Name[1] <> ’.’) then
//文件沒有查找結束時
begin
DirsSize:=DirsSize+Sr.Size;
inc(DirsCount);
ChDir(Sr.Name) ;
MakeTree ; //以樹形顯示文件路徑,繼續查找和統計
ChDir(’..’) ;
end ;
Err:=FindNext(Sr) ;
end;
end;

(2)當點擊“查找”按鈕時,先要設置各個控件的初始狀態,然後調用相關函數進行查找和統計。統計完畢,顯示統計結果窗口。顯示統計結果的文件大小時,文件占用空間小於1M 與大於1M 分別進行處理。代碼如下:

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
TreeCount:=1; //統計初始設置
FilesCount:=0;
DirsCount:=0;
TreeSize:=0;
FilesSize:=0;
DirsSize:=0;
ChDir(DirectoryListBox1.Directory);
//設置DirectoryListBox1 與所指定驅動器一致
MakeTree;
with Form2 do
begin
Edit1.Text:=inttostr(DirsCount); //數據類型轉換
Edit2.Text:=inttostr(FilesCount);
if filesSize<1048576.0 then //當文件總空間小於1M 時
begin
FileSize1:=(FilesSize)/1024;
Edit3.Text:=FormatFloat(’0’+’KB’,FileSize1);
end
else //當文件總空間大於1M 時
begin
FileSize1:=(FilesSize)/1048576;
Edit3.Text:=FormatFloat(’0’+’M’,FileSize1);
end;
end;
Form2.show; //顯示Form2
end;

(3)退出程序的運行只需Close 語句即可實現。

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
close; //退出程序
end;

(4)點擊統計結果窗體的返回按鈕,實現關閉統計結果窗體,返回主程序窗口的功能,代碼如下:

procedure TForm2.Button1Click(Sender: TObject);
begin
Form2.close; //關閉統計結果窗體,返回查詢窗口
end;

程序完整代碼:Unit1文件代碼:

001 unit Unit1; 002 interface 003 uses 004 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 005 StdCtrls, Buttons, ExtCtrls, FileCtrl; 006 type 007 TForm1 = class(TForm) 008 Panel1: TPanel; 009 Panel2: TPanel; 010 BitBtn1: TBitBtn; 011 Panel3: TPanel; 012 Panel4: TPanel; 013 DriveComboBox1: TDriveComboBox; 014 Panel5: TPanel; 015 DirectoryListBox1: TDirectoryListBox; 016 BitBtn2: TBitBtn; 017 procedure MakeTree; 018 procedure BitBtn1Click(Sender: TObject); 019 procedure BitBtn2Click(Sender: TObject); 020 private 021 { Private declarations } 022 public 023 { Public declarations } 024 end; 025 var 026 Form1: TForm1; 027 TreeCount, FilesCount, DirsCount : integer; 028 TreeSize, FilesSize, DirsSize : longint; 029 fileSize1:real; 030 implementation 031 uses Unit2; 032 {$R *.DFM} 033 procedure TForm1.MakeTree; 034 var Sr : TSearchRec; 035 Err : integer; 036 TrSize, FilePath : string; 037 Begin 038 Err:=FindFirst(’*.*’,$37,Sr) ; //查找符合條件的第一個文件 039 While (Err = 0do 040 begin 041 if Sr.Name[1]<>’.’ then 042 begin 043 FilePath:=ExpandFileName(Sr.Name); //設置查找文件路徑 044 TreeSize:=TreeSize+Sr.Size; 045 TrSize:=FloatToStr(TreeSize); //將Float 類型轉換成Str 類型 046 Form1.Caption:=DirectoryListBox1.Directory+’ ’+IntToStr(TreeCount) 047 +’ files and folders Size: ’+TrSize; 048 //改變窗體名,動態顯示查詢過程 049 if (Sr.Attr and faDirectory)=0 then //文件查找結束時 050 begin 051 FilesSize:=FilesSize+Sr.Size; //統計文件所占磁盤空間的大小 052 inc(FilesCount); 053 end; 054 inc(TreeCount); 055 end; 056 If ((Sr.Attr and faDirectory)<>0)AND(Sr.Name[1] <> ’.’) then 057 //文件沒有查找結束時 058 begin 059 DirsSize:=DirsSize+Sr.Size; 060 inc(DirsCount); 061 ChDir(Sr.Name) ; 062 MakeTree ; //以樹形顯示文件路徑,繼續查找和統計 063 ChDir(’..’) ; 064 end ; 065 Err:=FindNext(Sr) ; 066 end ; 067 end; 068 procedure TForm1.BitBtn1Click(Sender: TObject); 069 begin 070 TreeCount:=1//統計初始設置 071 FilesCount:=0; 072 DirsCount:=0; 073 TreeSize:=0; 074 FilesSize:=0; 075 DirsSize:=0; 076 ChDir(DirectoryListBox1.Directory); 077 //設置DirectoryListBox1 與所指定驅動器一致 078 MakeTree; 079 with Form2 do 080 begin 081 Edit1.Text:=inttostr(DirsCount); //數據類型轉換 082 Edit2.Text:=inttostr(FilesCount); 083 if filesSize<1048576.0 then //當文件總空間小於1M 時 084 begin 085 FileSize1:=(FilesSize)/1024; 086 Edit3.Text:=FormatFloat(’0’+’KB’,FileSize1); 087 end 088 else //當文件總空間大於1M 時 089 begin 090 FileSize1:=(FilesSize)/1048576; 091 Edit3.Text:=FormatFloat(’0’+’M’,FileSize1); 092 end; 093 end; 094 Form2.show; //顯示Form2 095 end; 096 procedure TForm1.BitBtn2Click(Sender: TObject); 097 begin 098 close; //退出程序 099 end; 100 end.

Unit2文件代碼:

vIEw source print? 01 unit Unit2; 02 interface 03 uses 04 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 05 StdCtrls; 06 type 07 TForm2 = class(TForm) 08 Button1: TButton; 09 Label1: TLabel; 10 Edit1: TEdit; 11 Label2: TLabel; 12 Edit2: TEdit; 13 Edit3: TEdit; 14 Label3: TLabel; 15 procedure Button1Click(Sender: TObject); 16 private 17 { Private declarations } 18 public 19 { Public declarations } 20 end; 21 var 22 Form2: TForm2; 23 implementation 24 {$R *.DFM} 25 uses unit1; 26 procedure TForm2.Button1Click(Sender: TObject); 27 begin 28 Form2.close; //關閉統計結果窗體,返回查詢窗口 29 end; 30 end.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved