You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi如何在未知文件名时仅复制目录中的PDF文件?

如何批量复制目录中的PDF文件(未知文件名情况下)

看来你之前是针对单个已知文件名的文件用CopyFile来复制,现在要批量处理未知文件名的PDF对吧?我给你整理了一个Delphi下的实现方案,直接就能用:

核心思路

因为不知道具体文件名,我们需要先遍历目标目录的所有文件,筛选出后缀为.pdf(不区分大小写)的文件,再逐个调用CopyFile完成复制。

完整实现代码

procedure CopyAllPDFs(const SourceDir, DestDir: string);
var
  SearchRec: TSearchRec;
  SourcePath, DestPath: string;
begin
  // 先确保目标目录存在,不存在就创建
  if not DirectoryExists(DestDir) then
    ForceDirectories(DestDir);

  // 开始遍历源目录下的所有文件
  if FindFirst(IncludeTrailingPathDelimiter(SourceDir) + '*.*', faAnyFile, SearchRec) = 0 then
  begin
    try
      repeat
        // 跳过目录和特殊的.、..文件夹
        if (SearchRec.Attr and faDirectory) = 0 then
        begin
          // 不区分大小写检查文件后缀是否为PDF
          if SameText(ExtractFileExt(SearchRec.Name), '.pdf') then
          begin
            // 拼接完整的源文件路径和目标文件路径
            SourcePath := IncludeTrailingPathDelimiter(SourceDir) + SearchRec.Name;
            DestPath := IncludeTrailingPathDelimiter(DestDir) + SearchRec.Name;
            
            // 执行复制操作,第三个参数为true表示覆盖已存在的同名文件
            if not CopyFile(PChar(SourcePath), PChar(DestPath), True) then
            begin
              // 这里可以根据需求替换成日志记录或其他错误处理逻辑
              ShowMessage('复制失败:' + SourcePath);
            end;
          end;
        end;
      until FindNext(SearchRec) <> 0;
    finally
      // 一定要记得关闭搜索句柄,避免资源泄漏
      FindClose(SearchRec);
    end;
  end;
end;

调用示例(适配你的原有路径)

把这个函数集成到你的代码里,直接传入你的源目录和目标目录即可:

var
  SourceDir, DestDir: string;
begin
  // 源目录:对应你原来的obPath.CaseTmpPath + '\' + currentCase.patientCase
  SourceDir := obPath.CaseTmpPath + '\' + currentCase.patientCase;
  // 目标目录:对应你原来的obPath.ServerData + currentCase.patientCase
  DestDir := obPath.ServerData + currentCase.patientCase;
  
  // 执行批量PDF复制
  CopyAllPDFs(SourceDir, DestDir);
end;

额外说明

  • 大小写兼容:用SameText来比较后缀,不管是.pdf还是.PDF都能被筛选到
  • 目录创建:ForceDirectories会自动创建多级目录,不用担心目标目录不存在的问题
  • 错误处理:如果复制失败(比如权限不足、文件被占用),会弹出提示,你可以根据实际需求改成日志记录等更友好的处理方式
  • 递归复制(可选):如果需要复制子目录里的PDF,可以给函数加上递归逻辑,当遍历到子目录时再次调用CopyAllPDFs即可

内容的提问来源于stack exchange,提问作者Nevermore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:25:45