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

时间:2018-04-24 12:55:01

标签: delphi

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

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

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

1 个答案:

答案 0 :(得分:3)

如果您只使用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的文档以及有关SetErrorMode的文档(正如David注意SetErrorMode(SEM_FAILCRITICALERRORS)应该只在应用程序初始化期间调用一次

正如Remy在评论#0中所说,因为需要双空终止字符串。