2009年3月24日 星期二

删除整個目錄內所有檔案的函式

以下內容轉貼自Delphi K.TOP

方式一:
可以這樣用,刪除C:\12這個資料夾,不管裡面有幾個資料夾或檔案

procedure TForm1.Button1Click(Sender: TObject);
VAR
FOS : TSHFileOpStruct;
FromNames:string;
begin
FillChar(FOS, Sizeof(TShFileOpStruct), 0);
FromNames := 'c:\12\*.*'+#0;
WITH FOS DO
Begin
Wnd := Self.Handle;
wFunc := FO_DELETE;
pFrom := PChar(FromNames);
fFlags := FOF_NoConfirmation;
End;
ShFileOperation(FOS);
//RemoveDir('c:\12');
end;


方式二:
參考下面的方法
此做法會連同目錄一並移除
來源:http://delphi.about.com/cs/adptips1999/a/bltip1199_2.htm
《Delete folders recursively》

uses ShellAPI;
Function DelTree(DirName : string): Boolean;
var
SHFileOpStruct : TSHFileOpStruct;
DirBuf : array [0..255] of char;
begin
try
Fillchar(SHFileOpStruct,Sizeof(SHFileOpStruct),0) ;
FillChar(DirBuf, Sizeof(DirBuf), 0 ) ;
StrPCopy(DirBuf, DirName) ;
with SHFileOpStruct do begin
Wnd := 0;
pFrom := @DirBuf;
wFunc := FO_DELETE;
fFlags := FOF_ALLOWUNDO;
fFlags := fFlags or FOF_NOCONFIRMATION;
fFlags := fFlags or FOF_SILENT;
end;
Result := (SHFileOperation(SHFileOpStruct) = 0) ;
except
Result := False;
end;
end;

//使用
if DelTree('c:\TempDir') then
ShowMessage('Directory deleted!')
else
ShowMessage('Errors occured!') ;

沒有留言: