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 ;