Contributor: SWAG SUPPORT TEAM

unit FileUtil;

interface

procedure CopyFile( Source, Dest : string );

implementation

uses
  WinTypes, SysUtils, Dialogs, LZExpand;


procedure CopyFile( Source, Dest : string );
var
  SourceFile  : Integer;   { The LZ* functions use File Handles }
  DestFile    : Integer;
  RetCode     : Longint;
  OpenFileBuf : TOFStruct;        { Record needed by LZOpenFile }
  FileNameStz : array[ 0..255 ] of Char;
  E           : EInOutError;   { Exception Object, just in case }
begin
  StrPCopy( FileNameStz, Source );
  SourceFile := LZOpenFile( FileNameStz, OpenFileBuf, of_Read );

  if SourceFile < 0 then
  begin
    E := EInOutError.CreateFmt( 'Could not open %s', [ Source ] );
    E.ErrorCode := SourceFile;
    raise E;                               { Raise an Exception }
  end;

  StrPCopy( FileNameStz, Dest );
  DestFile := LZOpenFile( FileNameStz, OpenFileBuf, of_Create );

  if DestFile < 0 then
  begin
    LZClose( SourceFile );       { Be sure to close Source File }
    E := EInOutError.CreateFmt( 'Could not create %s', [ Dest ] );
    E.ErrorCode := DestFile;
    raise E;                               { Raise an Exception }
  end;

  RetCode := LZCopy( SourceFile, DestFile );

  LZClose( SourceFile );             { Even if LZCopy fails, we }
  LZClose( DestFile );             { still must close the files }

  if RetCode < 0 then
  begin
    E := EInOutError.CreateFmt( 'Could not copy %s to %s',
                                [ Source, Dest ] );
    E.ErrorCode := RetCode;
    raise E;                               { Raise an Exception }
  end;
end; {= CopyFile =}

end.