向表單上添加兩個TButton組件,一個用於建立新的檔案夾,另一個用於刪除新建立的檔案夾,設計完成的表單1所示。
圖1 主介面
首先在程式的uses段中添加對ShellApi的引用,另外還要在“建立”按鈕的響應過程中添加下列代碼:
procedure TForm1.btnCreateClick(Sender: TObject);
begin
CreateDirectory(PChar(ExtractFilePath(ParamStr(0))+’Test’),nil);
end;
程式運行初期就會執行CreateDirectory(PChar(ExtractFilePath(ParamStr(0))+’Test’),nil)語句,在程式執行個體所在的目錄中建立一個子目錄test。
在程式運行過程中,單擊“刪除”按鈕就可以將新建立的test子目錄刪除,響應代碼如下:
procedure TForm1.btnDeleteClick(Sender: TObject);
var
T:TSHFileOpStruct;
P:String;
begin
P:=ExtractFilePath(ParamStr(0))+’Test’;
with T do
begin
Wnd:=0;
wFunc:=FO_DELETE;
pFrom:=PChar(P);
pTo:=nil;
fFlags:=FOF_ALLOWUNDO+FOF_NOERRORUI;
hNameMappings:=nil;
lpszProgressTitle:=’正在刪除檔案夾’;
fAnyOperationsAborted:=False;
end;
SHFileOperation(T);
end;
程式通過填充TSHFileOpStruct 類型的對象T的屬性來設定本次刪除操作可以Undo,當然最終的刪除操作是通過SHFileOperation(T)來完成的。如果SHFileOperation函數傳回值為0,就表示刪除成功,否則表示刪除失敗。
如果使用者在程式中想要直接刪除test子目錄,可以直接通過調用RemoveDirectory (Pchar(ExtractFilePath(ParamStr(0))+’Test’))語句來實現
程式碼如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShellApi;
type
TForm1 = class(TForm)
btnCreate: TButton;
btnDelete: TButton;
procedure btnCreateClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btnCreateClick(Sender: TObject);
begin
CreateDirectory(PChar(ExtractFilePath(ParamStr(0))+’Test’),nil);
end;
procedure TForm1.btnDeleteClick(Sender: TObject);
var
T:TSHFileOpStruct;
P:String;
begin
P:=ExtractFilePath(ParamStr(0))+’Test’;
with T do
begin
Wnd:=0;
wFunc:=FO_DELETE;
pFrom:=PChar(P);
pTo:=nil;
fFlags:=FOF_ALLOWUNDO+FOF_NOERRORUI;
hNameMappings:=nil;
lpszProgressTitle:=’正在刪除檔案夾’;
fAnyOperationsAborted:=False;
end;
SHFileOperation(T);
//RemoveDirectory(PChar(ExtractFilePath(ParamStr(0))+’Test’));
end;
end.
儲存檔案,然後按F9鍵運行程式,程式啟動並執行初始畫面2所示。
圖2 程式啟動並執行初始畫面
單擊“建立”按鈕就會在程式執行個體所在的目錄中建立一個子目錄test,單擊“刪除”按鈕就可以將新建立的test子目錄刪除。
本執行個體介紹了如何建立檔案夾,並且為刪除檔案夾提供了兩種途徑——一種是刪除檔案夾到資源回收筒中,另外一種就是直接刪除。