Delphi提供了許多關於檔案操作的函數,其中關於目錄操作的有目錄的建立與刪除、設定目前目錄、取得目前目錄等。目錄的刪除有函數(Function)RemoveDir和過程(PRocedure)RmDir,但它們都只能刪除空目錄,對於非空目錄則不能刪除。要實作刪除整個目錄樹(DelTree)必須編寫程式來刪除其中的子目錄和檔案。
目錄中的檔案可以透過呼叫函數DeleteFile來刪除,但對於特殊檔案(唯讀、系統、隱藏等)則無法有效刪除,必須變更檔案屬性為普通檔案才能刪除。更改檔案屬性可以用函數FileSetAttr,這裡將特殊檔案的屬性設定為普通檔案屬性(屬性值為0)。
考慮到樹型目錄結構最適合遞歸方法,這裡都用遞歸演算法來實作DelTree函數。下面是具體實現程序。
//path是需要刪除的目錄路徑
//目錄成功刪除回傳True,否則回傳False
function TForm1.Deltree (path : string): Boolean ;
var
SearchRec: TSearchRec;
begin
//判斷目錄是否存在
if DirectoryExists(path) then
begin
//進入該目錄,刪除其中的子目錄和文件
oldDir := GetCurrentDir;
ChDir(path);
//查找目錄中所有任何文件
FindFirst(′??.??′, faAnyFile, SearchRec);
repeat
//修改檔案屬性為普通屬性值
FileSetAttr(SearchRec.Name,0);
//如果是目錄且不是.和..則遞歸呼叫DelTree
if(SearchRec.Attr and faDirectory > 0) then
begin
if(SearchRec.Name[1]<>′.′) then
if(not Deltree(SearchRec.Name)) then
break;
end
//如果是檔案直接刪除
else
if(not DeleteFile(SearchRec.Name))then
break ;
//繼續找,直到最後
until (FindNext(SearchRec)<>0) ;
//回到父目錄,刪除該目錄
ChDir(′..′);
Result := ReMoveDir(path);
SetCurrentDir(oldDir);
end
else
Result := False ;
end ;
程式在Windows 98、Delphi 4.0下編譯通過。