加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Delphi中复制大量文件

发布时间:2020-12-15 04:22:37 所属栏目:大数据 来源:网络整理
导读:在我的应用程序中,我需要复制超过1000个小文件 这是我正在使用的代码,但它非常慢 有没有更好的方法呢? procedure Tdatafeeds.RestotreTodaysFiles;var SearchRec: TSearchRec; FromFn,ToFn: string;Begin if DirectoryExists(BackupPath1) then begin try i
在我的应用程序中,我需要复制超过1000个小文件

这是我正在使用的代码,但它非常慢
有没有更好的方法呢?

procedure Tdatafeeds.RestotreTodaysFiles;
var
  SearchRec: TSearchRec;
  FromFn,ToFn: string;
Begin
    if DirectoryExists(BackupPath1) then
    begin
      try
        if FindFirst(BackupPath1 + '*.*',(faAnyFile AND NOT(faDirectory)),SearchRec) = 0 then
        begin
          repeat
            FromFn := BackupPath1 + '' + SearchRec.name;
            ToFn := DatafeedsPath1 + '' + SearchRec.name;
            CopyFile(Pchar(FromFn),Pchar(ToFn),false);
          until FindNext(SearchRec) <> 0;
        end;
      finally
        FindClose(SearchRec);
      end;
    end;
End;

解决方法

绝对按照上面的建议使用SHFileOperation(),CopyFile对于那么多文件来说太慢了.看起来您基本上正在恢复整个文件夹,因此搜索功能可能是不必要的,并且可以进一步降低速度.这样的事可能会有所帮助:
uses ShellApi;

function CopyDir(const fromDir,toDir: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos,SizeOf(fos));
  with fos do
  begin
    wFunc  := FO_COPY;
    fFlags := FOF_FILESONLY;
    pFrom  := PChar(fromDir + #0);
    pTo    := PChar(toDir)
  end;
  Result := (0 = ShFileOperation(fos));
end;

这个函数会提示覆盖现有文件的提示(也许可以调整以跳过它),但用户可以选择“全部”,这样它只需一次点击程序,速度更快,有进度条,如果需要可以取消.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读