没有文件的文件夹删除用rmdir之类的,
但是现在是有文件和子目录的目录,如何用1个函数轻松解决。
多谢各位DEphi高高手高抬贵手相组

解决方案 »

  1.   


    function   DeleteFolder(Path:   string):   Boolean;     
      var   
          search:   TSearchRec;   
          ret:   integer;   
          key:   string;   
      begin   
          if   Path[Length(Path)]   <>   '\'   then   
              Path:=   Path+   '\';   
          key   :=   Nowpath   +   '*.*';   
          ret   :=   findFirst(key,   faanyfile,   search);   
          while   ret   =   0   do   begin   
              if   ((search.Attr   and   fadirectory)   =   faDirectory)   
                  then   begin   
                  if   (Search.Name   <>   '.')   and   (Search.name   <>   '..')   then   
                      DeleteDirectory(NowPath   +   Search.name);   
              end   else   begin   
                  if   ((search.attr   and   fadirectory)   <>   fadirectory)   then   begin   
                      deletefile(NowPath   +   search.name);   
                  end;   
              end;   
              ret   :=   FindNext(search);   
          end;   
          findClose(search);   
          removedir(Path);   
          result   :=   True;   
      end;
      

  2.   

    下面的代码将调用windows的删除过程uses ShellApi;function DelDirectory(const Path: string): boolean;
    var
        fo: TSHFILEOPSTRUCT;
    begin
        FillChar(fo, SizeOf(fo), 0);
        with fo do
        begin
          Wnd    := 0;
          wFunc := FO_DELETE;
          pFrom := PChar(Path+ #0);
          pTo    := #0#0;
          //fFlags := FOF_NOCONFIRMATION + FOF_SILENT;//加上这句,将不弹出对话框
        end;
        Result := (SHFileOperation(fo) = 0);
    end;
      

  3.   


    procedure deletedirectory(dirname: string);
    var
      fo: TSHFILEOPSTRUCT;
    begin
      FillChar(fo, SizeOf(fo), 0);
      with fo do
      begin
        Wnd := 0;
        wFunc := FO_DELETE;
        pFrom := PChar(dirname+#0);
        fFlags := FOF_NOCONFIRMATION+FOF_NOCONFIRMMKDIR    ;
      end;
      Result := (SHFileOperation(fo) = 0);
    end;
      

  4.   

    新手来学习的,这里面的NowPath,faanyfile,DeleteDirectory是哪来的?编译时提示未声明.
      

  5.   


    faanyfile:SysUtils
    NowPath:换成Path
    DeleteDirectory:换成DeleteFolder,这里有个递归调用
    不好意思^_^
      

  6.   

    改正后编译通过,我试了下DeleteFolder('C:\klxq'),结果是返回TRUE,
    但是这个目录下的文件都还在,是怎么回事?
      

  7.   


    有一个问题要注意,有一些属性标记为只读的,就删除不掉,所以在查到文件时,把属性改一下
    修改属性为非只读
    FileSetAttr('文件名',faArchiv);
      

  8.   

    看来我RP有问题..奇怪了,前辈看下怎么回事,C:\klxq这个目录下的东西还在,不是只读的,还有faArchiv编译提示未声明,我是不是还漏了什么?procedure TForm1.Button4Click(Sender: TObject);
    begin
      if DeleteFolder('C:\klxq') then
        information('111');
    end;function TForm1.DeleteFolder(Path: string): Boolean;
    var
      search: TSearchRec;
      ret: integer;
      key: string;
    begin
      if Path[Length(Path)]<>'\' then
        Path:=Path+'\';
      key := Path+'*.*';
      ret := findFirst(key,faanyfile,Search);
      while ret=0 do
      begin
        if ((Search.Attr and fadirectory)=faDirectory) then
        begin
          if (Search.Name <> '.') and (Search.Name <> '..') then
            //FileSetAttr(Path+Search.Name,faArchiv);
            DeleteFolder(Path+Search.Name);
        end else
        begin
          if ((Search.Attr and fadirectory)<> fadirectory) then
            //FileSetAttr(Path+Search.Name,faArchiv);
            DeleteFolder(Path+Search.Name);
        end;
        ret:=FindNext(Search);
      end;
      findClose(Search);
      Removedir(Path);
      result:=true;
    end;
      

  9.   

    pengderun 
    pengderun 
    pengderun 
    试试2楼和3楼的代码吧,最近在外办公,回公司测试后结贴,谢谢各位的大侠相助
    我想2楼和3楼的代码应该是我想要的吧
      

  10.   

    1,2楼都没问题,我的错..看错了,我把其中个deletefile也看成deletefolder了..