FAQ > 金融建模 > 第三方交互 > 其他

Q:如何复制文件夹到新的位置    

  • A:天软中没有直接的模型可以实现文件夹的复制,但可以通过模型FileCopy迭代复制文件夹下所有文件实现文件夹的复制。
     其中创建新的文件夹通过模型CreateDir实现。

    实现模型
    FolderCopy
    模型文件附件:FolderCopy.fun
    代码及函数说明
    Function FolderCopy(ScrAlias,ScrName,DestAlias,DestName,FailifExists,Files);
    Begin
    {**
      %% @explain(说明) 文件复制,支持整个文件夹复制
               源文件夹路径不存在返回0,目标文件夹路径不存在会新建
      %% @param(SrcAlias)(VarChar) 源文件目录别名。
      %% @param(SrcName)(VarChar) 源文件名
      %% @param(DestAlias)(VarChar) 目标文件目录别名
      %% @param(DestName)(VarChar) 目标文件名
      %% @param(FailIfExists)(Boolean) 目标存在时拷贝失败。默认为假,也就是说默认是即便目标已经存在也拷贝。
                       如果为真,则在目标已经存在时,则拷贝失败
      %% @param(Files)(array) 复制的文件列表
      %% @return(Boolean) 文件复制是否成功
    **}
    {
      %% @example(范例) 将本地文件夹C:\Users\86152\Desktop\test 复制到C:\Users\86152\Desktop\测试
      f1:="C:\\Users\\86152\\Desktop\\test";
      f2:="C:\\Users\\86152\\Desktop\\测试";
      ret:=rdo2 Foldercopy("",f1,"",f2,0,t);
      if ret then
        return t;
      else
        return ret;
    }

      if not Files then Files:=array();
      fname:="FileName";
      ftype:="Attr";
      fcopy:="FileCopy";
      rt:=filelist(ScrAlias,ScrName);//获取源文件
      if not istable(rt) then return 0;
      //源文件不是文件夹,复制文件
      if rt[0,ftype]="A" then
      begin
        ret:=FileCopy(ScrAlias,ScrName,DestAlias,DestName,FailifExists);
        Files&=array((fname:ScrName,"DestName":DestName,ftype:"A",fcopy:ret?:0));
        return ret;
      end
      //创建文件夹,若文件夹存在则创建失败
      ret:=CreateDir(DestAlias,DestName);
      Files&=array((fname:ScrName,"DestName":DestName,ftype:"D",fcopy:ret?:0));
      //获取文件夹中的所有文件逐个复制
      flist:=filelist(ScrAlias,ScrName$"\\*");
      flist:=select * from flist where not ([fname] in array(".","..")) end;
      if istable(flist) then
      begin
        for i in flist do
        begin
          f0:=ScrName$"\\"$flist[i,fname];
          f1:=DestName$"\\"$flist[i,fname];
          if flist[i,ftype]="D" then
            FolderCopy(ScrAlias,f0,DestAlias,f1,FailifExists,Files);
          else
          begin
            ret:=FileCopy(ScrAlias,f0,DestAlias,f1,FailifExists);
            Files&=array((fname:f0,"DestName":f1,ftype:flist[i,ftype],fcopy:ret?:0));
          end
        end
      end
      return 1;
    End;

    范例:将本地文件夹C:\Users\86152\Desktop\test 复制到C:\Users\86152\Desktop\测试
    源文件夹下的文件:子文件夹test下也存在四个不同格式的文件

    范例代码:
      f1:="C:\\Users\\86152\\Desktop\\test";
      f2:="C:\\Users\\86152\\Desktop\\测试";
      ret:=rdo2 Foldercopy("",f1,"",f2,0,t);
      if ret then
        return t;
      else
        return ret;

    执行结果:

    复制的目标文件: