如何删除一个目录下的所有文件,目录中只有文件。

解决方案 »

  1.   

    用api函数,好像是DeleteFile,文件明为*.*即可
      

  2.   

    deletefile('c:\myftp\web\*.*');  删不掉
      

  3.   

    //删除文件或目录
    {
     CanUndo =True,表示把文件或目录删除到回收站(默认方式)
             =False,表示真正删除
    }
    function DelFD(const Name:String;CanUndo:Boolean=True):Boolean;
    var
     Fo:TSHFileOpStruct;
    begin
     if not JudgeFDExists(Name) then
      Raise Exception.Create('Cannot find the file or directory.')
     else
     begin
      FillChar(Fo,SizeOf(Fo),0);
      with Fo do
      begin
       Wnd:=0;
       wFunc:=FO_DELETE;
       pFrom:=PChar(Name+#0);
       pTo:=#0#0;
       if CanUndo then fFlags:=FOF_AllOWUNDO+FOF_NOCONFIRMATION
       else fFlags:=FOF_NOCONFIRMATION+FOF_SILENT;
      end;
      Result:=(SHFileOperation(Fo)=0);
     end; 
    end;
      

  4.   

    把文件夹下面的文件加入一个list中,然后循环调用deletefile().
      

  5.   

    function   EmptyDirectory(TheDirectory   :String   ;   Recursive   :   Boolean)   :  
      Boolean;  
      var  
      SearchRec   :   TSearchRec;  
      Res   :   Integer;  
      begin  
      Result   :=   False;  
      TheDirectory   :=   NormalDir(TheDirectory);  
      Res   :=   FindFirst(TheDirectory   +   '*.*',   faAnyFile,   SearchRec);  
      try  
      while   Res   =   0   do  
      begin  
      if   (SearchRec.Name   <>   '.')   and   (SearchRec.Name   <>   '..')   then  
      begin  
      if   ((SearchRec.Attr   and   faDirectory)   >   0)   and   Recursive  
      then   begin  
      EmptyDirectory(TheDirectory   +   SearchRec.Name,   True);  
      RemoveDirectory(PChar(TheDirectory   +   SearchRec.Name));  
      end  
      else   begin  
      DeleteFile(PChar(TheDirectory   +   SearchRec.Name))  
      end;  
      end;  
      Res   :=   FindNext(SearchRec);  
      end;  
      Result   :=   True;  
      finally  
      FindClose(SearchRec.FindHandle);  
      end;  
      end;
      

  6.   

    procedure  delDir(dest:String);
    var sub,files:array of string;
    name,tem1,tem2:string;
       i,pos,j,len:integer;
       fileorfiles:boolean;
    begin
     //  try
          sub:=directory.GetFileSystemEntries(dest);
          if length(sub)<>0 then
          begin
             for i:=0 to length(sub)-1 do
                begin
                  fileorfiles:=false;
                  name:=sub[i];
                  pos:=length(dest)+2;
                  len:=length(name)-pos+1;
                  tem1:=copy(name,pos,len);
                  for j := 0 to length(tem1) - 1 do
                    begin
                       tem2:=copy(tem1,j,1);
                       if tem2='.' then
                         begin
                           fileorfiles:=true;
                           break;
                         end;
                    end;
                  if fileorfiles then
                      windows.DeleteFile(dest+'\'+tem1)
                  else
                    delDir(dest+'\'+tem1);
                  if fileorfiles=false then
                    directory.Delete(name);
                end;
          end;
    end;
    procedure deletedir(dest:String);
    begin
         try
          delDir(dest);
          directory.Delete(dest);
         except
               ;
         end;
    end;直接用deletedir即可