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

Delphi仅复制具有特定扩展名的文件

  •  1
  • Nevermore  · 技术社区  · 8 年前

    我只想复制pdf文件。我正在使用此方法,如果我知道文件名:

    CopyFile(PChar(obPath.CaseTmpPath + '\' + currentCase.patientCase + '\Info_' + currentCase.patientCase + '.cxt'), PChar(obPath.ServerData + currentCase.patientCase + '\Info_' + currentCase.patientCase + '.cxt'), true);
    

    这次,我不知道文件名。目录中有一些文件,如PDF、JPEG。我只想复制pdf文件,但如何复制?

    1 回复  |  直到 8 年前
        1
  •  4
  •   BigBother    8 年前

    如果您仅使用Windows,而对代码可移植性不感兴趣,则可以恢复到win api:

    uses
      ShellApi;
    
    function MultiFileCopy(const ASource, ADest: string): Boolean;
    var
      FO: TSHFileOpStruct;
    begin
      FillChar(FO, SizeOf(FO), #0);
      FO.Wnd   := 0;
      FO.wFunc := FO_COPY;
      FO.pFrom := PChar(ASource + #0);
      FO.pTo   := PChar(ADest + #0);
      FO.fFlags := FOF_FILESONLY  or FOF_NOERRORUI or FOF_NOCONFIRMATION or FOF_SILENT;
      Result := (SHFileOperation(FO) = 0)and(not FO.fAnyOperationsAborted);
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage(BoolToStr(MultiFileCopy('C:\*.pdf', 'X:\'), True));
    end;
    

    上面的代码包含一些使方法完全静音的技巧,请阅读有关SHFileOperation for flags和SetErrorMode的文档( 正如David所指出的 SetErrorMode(SEM_FAILCRITICALERRORS) 在应用程序初始化期间只应调用一次 )

    正如Remy在评论#0中所说,之所以存在,是因为需要以双null结尾的字符串。