用Delphi編寫DelTree程序
發(fā)表時(shí)間:2024-02-24 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]Delphi提供了關(guān)于文件操作的許多函數(shù),其中關(guān)于目錄操作的有目錄的創(chuàng)建與刪除、設(shè)置當(dāng)前目錄、獲取當(dāng)前目錄等。目錄的刪除有函數(shù)(Function)RemoveDir和過程(Procedure)RmDir,但它們都只能刪除空目錄,對(duì)于非空目錄則不能刪除。要實(shí)現(xiàn)刪除整個(gè)目錄樹(DelTree)必須編寫...
Delphi提供了關(guān)于文件操作的許多函數(shù),其中關(guān)于目錄操作的有目錄的創(chuàng)建與刪除、設(shè)置當(dāng)前目錄、獲取當(dāng)前目錄等。目錄的刪除有函數(shù)(Function)RemoveDir和過程(Procedure)RmDir,但它們都只能刪除空目錄,對(duì)于非空目錄則不能刪除。要實(shí)現(xiàn)刪除整個(gè)目錄樹(DelTree)必須編寫程序來刪除其中的子目錄和文件。
目錄中的文件可以通過調(diào)用函數(shù)DeleteFile來刪除,但對(duì)于特殊文件(只讀、系統(tǒng)、隱藏等)則不能有效刪除,必須更改文件屬性為普通文件才能刪除。更改文件屬性可以用函數(shù)FileSetAttr,這里將特殊文件的屬性設(shè)置為普通文件屬性(屬性值為0)。
考慮到樹型目錄結(jié)構(gòu)最適合于遞歸方法,所有這里用遞歸算法來實(shí)現(xiàn)DelTree函數(shù)。下面是具體實(shí)現(xiàn)程序。
//path是需刪除的目錄路徑
//目錄成功刪除返回True,否則返回False
function TForm1.Deltree (path : string): Boolean ;
var
SearchRec: TSearchRec;
begin
//判斷目錄是否存在
if DirectoryExists(path) then
begin
//進(jìn)入該目錄,刪除其中的子目錄和文件
oldDir := GetCurrentDir;
ChDir(path);
//查找目錄中所有任何文件
FindFirst(′.′, faAnyFile, SearchRec);
repeat
//修改文件屬性為普通屬性值
FileSetAttr(SearchRec.Name,0);
//如果是目錄并且不是.和..則遞歸調(diào)用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 ;
//繼續(xù)查找,直到最后
until (FindNext(SearchRec)<>0) ;
//回到父目錄,刪除該目錄
ChDir(′..′);
Result := ReMoveDir(path);
SetCurrentDir(oldDir);
end
else
Result := False ;
end ;
該程序在Windows 98、Delphi 4.0下編譯通過。