删除目录的递归辅助函数:DoRemoveDir function DoRemoveDir(sDirName:String):Boolean; 
var 
hFindFile:Cardinal; 
tfile:String; 
sCurDir:String; 
bEmptyDir:Boolean; 
FindFileData:WIN32_FIND_DATA; 
begin 
//如果删除的是空目录,则置bEmptyDir为True 
//初始时,bEmptyDir为True 
bEmptyDir:=True; 
//先保存当前目录 
sCurDir:=GetCurrentDir; 
SetLength(sCurDir,Length(sCurDir)); 
ChDir(sDirName); 
hFindFile:=FindFirstFile('*.*',FindFileData); 
if hFindFile< >INVALID_HANDLE_VALUE then 
begin 
repeat 
tfile:=FindFileData.cFileName; 
if (tfile='.') or (tfile='..') then 
begin 
bEmptyDir:=bEmptyDir and True; 
Continue; 
end; 
//不是空目录,置bEmptyDir为False 
bEmptyDir:=False; 
if FindFileData.dwFileAttributes= 
FILE_ATTRIBUTE_DIRECTORY then 
begin 
if sDirName[Length(sDirName)]< >'\' then 
DoRemoveDir(sDirName+'\'+tfile) 
else 
DoRemoveDir(sDirName+tfile); 
if not RemoveDirectory(PChar(tfile)) then 
result:=false 
else 
result:=true; 
end 
else 
begin 
if not DeleteFile(PChar(tfile)) then 
result:=false 
else 
result:=true; 
end; 
until FindNextFile(hFindFile,FindFileData)=false; 
FindClose(hFindFile); 
end 
else 
begin 
ChDir(sCurDir); 
result:=false; 
exit; 
end; 
//如果是空目录,则删除该空目录 
if bEmptyDir then 
begin 
//返回上一级目录 
ChDir('..'); 
//删除空目录 
RemoveDirectory(PChar(sDirName)); 
end; //回到原来的目录下 
ChDir(sCurDir); 
result:=true; 
end; ---- 2.2删除目录的函数:DeleteDir function DeleteDir(sDirName:String):Boolean; 
begin 
if Length(sDirName)< =0 then 
exit; 
//删除... 
Result:=DoRemoveDir(sDirName) and RemoveDir(sDirName); 
end; 
Saien

解决方案 »

  1.   

    试试吧,一定可以的。
    Saien
      

  2.   

    好好看看SHFileOpStruct这个api,对你很有帮助!//将文件或目录放到回收站里
    procedure DelFilesToRecycled(Files : String; Forms : TForm);
    var
      ShellInfo: TSHFileOpStructA;
    begin
      Files := Files + #0;
      with ShellInfo do
        begin
          Wnd := Forms.Handle ;
          wFunc := FO_DELETE;
          pFrom := PChar(files);
          pTo := '';
          hNameMappings := nil;
          fFlags := FOF_ALLOWUNDO + FOF_NOCONFIRMATION;
          lpszProgressTitle := '' ;
          fAnyOperationsAborted := True;
        end;
      SHFileOperation(ShellInfo);
    end;