怎样删除目录中所有文件(里面目录除外)。
例如a目录中含有:
/dir1   /dir2   file1   file2
如何删除a里面所有文件,但不删除里面的dir1和dir2以及里面的文件?

解决方案 »

  1.   

    一位高手代码,看看
    =========================================
    //删除当前目录下的一类文件: 
    {1, 支持通配符,如 *.txt, *.* 等2, 不能删除文件夹3, 如果要删除某文件夹下的文件, 不许更改当前路径到改文件夹下,如://var CurrDir: string;CurrDir :=GetCurrentDir;chdir('a_dir');DelSomeFiles('*.*');chdir(CurrDir);}Procedure DelSomeFiles(fn: string);varSearchRec: TSearchRec;beginFindFirst(fn, faAnyFile, SearchRec);repeatif FileExists(SearchRec.Name) thenbeginFileSetAttr(SearchRec.Name,0); //修改文件属性为普通属性值DeleteFile(SearchRec.Name); //删除文件end;until (FindNext(SearchRec)<>0);FindClose(SearchRec);end;
      

  2.   

    var
      oldDir: String;//保存当前目录function 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 ;
      

  3.   

    Procedure DelFiles(aDir: string);
    var
      s:String;
      SearchRec: TSearchRec;
    begin
      FindFirst(aDir+'\*.*', faAnyFile, SearchRec);
      repeat
        s := SearchRec.Name;
        if SearchRec.Attr<>faDirectory then
        begin
          FileSetAttr(SearchRec.Name,0); //修改文件属性为普通属性值
          DeleteFile(aDir+'\'+SearchRec.Name); //删除文件
        end;
      until (FindNext(SearchRec)<>0);
      FindClose(SearchRec);
    end;
      

  4.   

    使用单元
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls,shellapi,shlobj;//调用window彻底删除界面
    function tform1.deletedirc(dir:string):boolean;
    var
    OpStruc: TSHFileOpStruct;
    frombuf, tobuf: Array [0..128] of Char;
    Begin
    FillChar( frombuf, Sizeof(frombuf), 0 );
    FillChar( tobuf, Sizeof(tobuf), 0 );
    StrPCopy( frombuf, dir );With OpStruc DO Begin
    Wnd:=0;//拥有窗口的句丙 这里设为0表示隐藏窗口 你可以设置为你的窗口
    wFunc:= FO_DELETE;
    pFrom:= @frombuf;
    pTo:=@tobuf;
    fFlags:= FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
    fAnyOperationsAborted:= False;
    hNameMappings:= Nil;
    end;
     ShFileOperation( OpStruc );
    end;