用Delphi編寫DelTree程式 (轉)

worldblog發表於2007-12-02
用Delphi編寫DelTree程式 (轉)[@more@]
  提供了關於操作的許多,其中關於目錄操作的有目錄的建立與刪除、設定當前目錄、獲取當前目錄等。目錄的刪除有函式(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 ;

  該程式在 98、Delphi 4.0下編譯透過。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987267/,如需轉載,請註明出處,否則將追究法律責任。

相關文章