代码之家  ›  专栏  ›  技术社区  ›  volvox

如何删除目录中与模式匹配的文件

  •  9
  • volvox  · 技术社区  · 15 年前

    3 回复  |  直到 15 年前
        1
  •  24
  •   dan-gph    8 年前
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      DeleteFiles(ExtractFilePath(ParamStr(0)),'*.jpg');
    end;
    
    procedure DeleteFiles(APath, AFileSpec: string);
    var
      lSearchRec:TSearchRec;
      lPath:string;
    begin
      lPath := IncludeTrailingPathDelimiter(APath);
    
      if FindFirst(lPath+AFileSpec,faAnyFile,lSearchRec) = 0 then
      begin
        try
          repeat
            SysUtils.DeleteFile(lPath+lSearchRec.Name);    
          until SysUtils.FindNext(lSearchRec) <> 0;
        finally
          SysUtils.FindClose(lSearchRec);  // Free resources on successful find
        end;
      end;
    end;
    
        2
  •  5
  •   DNR    8 年前

    System.IOUtils ,基本上是包装的 FindFirst FindNext 等:

    procedure DeleteFilesMatchingPattern(const Directory, Pattern: string);
      var FileName: string;
    begin
      for FileName in TDirectory.GetFiles(Directory, Pattern) do TFile.Delete(FileName);
    end;
    
        3
  •  5
  •   Mark Elder    7 年前

    您可以使用SHFileOperation函数。使用SHFileOperation的好处是,您可以选择将文件删除到回收站,并获得正常的API动画,以便用户知道发生了什么。缺点是删除的时间比Jeff的代码要长一点。

    更新:BP软件网站的下载链接不再有效。有一个 older version on the Embarcadero website

    TSHFileOp(1.3.5.1)(3KB)
    也许 31, 2006
    要复制SHFileOperation API, 移动、重命名或删除(使用 回收站支持)文件系统 对象

    SHFileOperation的文件名参数支持MS DOS样式的通配符。因此,您可以像这样使用组件:

    
          FileOps := TSHFileOp.Create(self);
    
          FileOps.FileList.Add(DirectoryName + '\*.jpg');
    
          FileOps.HWNDHandle := self.Handle;
          FileOps.Action := faDelete;
          FileOps.SHOptions :=
              [ofAllowUndo, ofNoConfirmation, ofFilesOnly, ofSimpleProgress];
          FileOps.Execute;
    

    如果不想删除每个jpg文件,或者需要从多个目录中删除,可以在调用execute之前将完整文件名或带有通配符的不同路径添加到文件列表字符串列表中。

    这是你的电话号码 MSDN Page for SHFileOperation
    请注意,从Windows Vista开始,SHFileOperation已被IFileOperation取代。我继续在WindowsVista上使用SHFileOperation,没有任何问题。