[fpc-pascal] Porting code from Windows D2007, missing Windows functions

Bo Berglund bo.berglund at gmail.com
Thu Jul 14 12:31:19 CEST 2016


On Thu, 14 Jul 2016 10:09:36 +0100, Graeme Geldenhuys
<mailinglists at geldenhuys.co.uk> wrote:

>If you have the time, it might be worth abstracting out the zip reading
>functionality so you can swap out the actual compression components used
>as needed. This will allow your application to change compression tools
>in future, without your application code needing any changes. This is
>always a good design philosophy when it comes to using 3rd party components.
>
>While working at a previous employer we use the TurboPower suite of
>compression components under Windows and Linux with great success, but
>could also swap it out for the FPC included ZLib unit.
>

Well,
I do have the zip *writing* in one single place as a method for the
class that handles the communication. It gets a target zipfile name
and a stringlist containing the files to zip as arguments, so that is
pretty portable.

Here is how it looks like:

uses PasZip;

function TSSCommHandler.ZipFiles(TargetFile: string; FileList:
TStringList): boolean;
var
  ZW: TZipWrite;
  i: integer;
  FileName: string;
begin
  Result := false;
  ZW := TZipWrite.Create(TargetFile);
  try
    try
      for i := 0 to FileList.Count-1 do
      begin
        FileName := FileList[i];
        if not FileExists(FileName) then Continue;
        ZW.AddDeflated(FileName);
      end;
      Result := true;
    except
      on E: Exception do
      begin
        FLastError := 'Zip error: ' + E.Message;
        exit;
      end;
    end;
  finally
    ZW.Free;
  end;
end;

What I need elsewhere in the code is not depening on PasZip, the call
to create the zipfile is simply:

ZipFiles(TargetFile, FileList);

So with the proper set of conditionals I could have different
implementations of this method for Windows and Linux.

Do you have an example of how to do the above with FPC ZLib?


-- 
Bo Berglund
Developer in Sweden




More information about the fpc-pascal mailing list