利用DLL在程序中实现文件拷贝

Author: 王寅龙 Date: 1999年 第26期 13版

  在所开发的应用软件中,有时我们对某些文件进行拷贝(如对数据库进行备份、制作安装程序等),但是常用的一些语言却没有提供可直接进行文件拷贝的过程或函数。为此,我曾利用Delphi编制了可提供文件拷贝过程的动态连接库Copf.dll,其输出过程为CopyFile。由于DLL具有简化编程、运行速度快等诸多优点,且不受编程语言的限制,用Delphi编 写的Copf.dll同样可被VB、VC等面向对象语言进行静态或动态调用,从而方便地在程序中实现文件拷贝。
  附源程序如下:
  library copf;
  uses
  SysUntils,
  Classes;
  Procedure copyfile(Sfname.Dfname:string):far;export;//带路径的文件名;
  Var
  Sourcef,Destinef:file;
  NumRead,NumWritten: Integer;
  Buf: array[1..4096] of Char;//定义缓冲区;
  Begin
  AssignFile(Sourcef,Dfname);
  Reset(Sourcef,1);
  AssignFile(Destinef,Dfname);
  Rewrite(Destinef,1);
  Repeat
  BlockRead(Sourcef,Buf,Size Of(Buf),NumRead);//读源文件;
  BlockWrite(Destinef,Buf,NumRead,NumWritten);//写目标文件;
  Until (NumRead = 0) or (NumWritten<>NumRead);
  CloseFile(Soucef);
  CloseFile(Destinef);
  End;
  Exports
  Copyfile;//输出过程;
  End;
  以上源程序编译后便生成Copf.dll。
  现就静态调用举例:
  unit Name;
  interface
  uses
  Windows…;
  Type
  Tzcform=class(Tform)
  …
  end;
  var
  Form1: Tform1;
  Implementation
  Procedure copyfile(Sfname,Dfname:string);far;external 
′c:\copf′;//DDL路径名;
  {$R *.DFM}
  Procedure Tform1.CopyButtonClick(Sender: Tobject);
  Begin
  …
  if fileexist(Sfname)//如果源文件;
  then copyfile(Sfname,Dfname);
  …
  end;