即如何删除某文件夹下 *.txt的文件呢 ?

解决方案 »

  1.   

    删除一子目录及其下面的文件 
        The following example demonstrates deleting all the files in a directory and then the directory itself. Additional processing would be required to delete read only files and files that are in use. procedure TForm1.Button1Click(Sender: TObject);
    var
        DirInfo: TSearchRec;
        r : Integer;
    begin
        r := FindFirst('C:\Download\Test\*.*', FaAnyfile, DirInfo);
        while r = 0 do
            begin
                if ((DirInfo.Attr and FaDirectory <> FaDirectory) and
                   (DirInfo.Attr and FaVolumeId <> FaVolumeID)) then
                      if DeleteFile(pChar('C:\Download\test\' + DirInfo.Name)) = false then
                         ShowMessage('Unable to delete : C:\Download\test\' + DirInfo.Name);
                r := FindNext(DirInfo);
            end;
        SysUtils.FindClose(DirInfo);
        if RemoveDirectory('C:\Download\Test') = false then
            ShowMessage('Unable to delete direcotry : C:\Download\test');
    end;
      

  2.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
      sr: TSearchRec;
    begin
      if FindFirst('c:\winnt', faAnyFile or faArchive or faVolumeID, sr) = 0 then
      begin
        repeat
          if LowerCase (ExtractFileExt (sr.Name)) = '.txt' then
            DeleteFile (sr.Name);
        until FindNext(sr) <> 0;
        FindClose(sr);
      end;
    end;
      

  3.   

    //删除目录下的某种类型的文件,支持通配符
    Function DeleteFileOneType(ADirctory:string;
                               AFileName:string;
                               ASubDirectory:Boolean):boolean;
    var
       lpFileOp: TSHFileOpStruct;
       FromDir:PChar;
       ToDir:PChar;
       f:TSearchRec;
    begin
       if AsubDirectory then//包括子目录
       begin
          GetMem(FromDir, Length(ADirctory+'\'+AFileName)+2);
          GetMem(ToDir, Length(ADirctory)+2);
          Try
             FillChar(FromDir^, Length(ADirctory+'\'+AFileName)+2, 0);
             FillChar(ToDir^, Length(ADirctory)+2, 0);
             StrCopy(FromDir, PChar(ADirctory+'\'+AFileName));
             StrCopy(ToDir, PChar(ADirctory));
             lpFileop.wFunc:=FO_DELETE;
             lpFileop.Wnd:=Application.Handle;
             lpFileop.pFrom:=FromDir;
             lpFileop.pTo:=ToDir;
             lpFileop.fFlags:=FOF_NOCONFIRMMKDIR or FOF_NOCONFIRMATION  or FOF_FILESONLY or FOF_NOERRORUI;
             lpFileop.fAnyOperationsAborted := False;
             lpFileop.hNameMappings := nil;
             lpFileop.lpszProgressTitle := nil;
             Result:=SHFileOperation(lpFileop)=0;
          Finally
             FreeMem(ToDir,Length(ADirctory)+2);
             FreeMem(FromDir,Length(ADirctory+'\'+AFileName)+2);
          end;
       end
       else  //不包括子目录
       begin
          Result:=false;
          if FindFirst(ADirctory+'\'+AFileName,$0000003F,f)=0 then
          begin
             Result:=DeleteFile(ADirctory+'\'+f.Name);
             while FindNext(f) = 0 do
                 DeleteFile(ADirctory+'\'+f.Name);
            FindClose(f);
          end;
       end;
    end;
      

  4.   

    procedure FDeleteTmpFile(AExtName: string);  //删除临时文件
      var
        F : TSearchRec;
        ResultValue : integer;
      begin
        ResultValue := FindFirst(FGetTmpPath + '\*.' + AExtName, faAnyFile, F);
        while ResultValue = 0 do
        begin
          if (F.Attr <> faDirectory) and (Pos(AExtName, F.Name) > 0) then
            DeleteFile(FGetTmpPath + '\' + F.Name);
          ResultValue := FindNext(F);
        end;
      end;