[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]

    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.

[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]