zlibfileserviceimpl.pas

来自「Delphi开发webservice的一套例子」· PAS 代码 · 共 112 行

PAS
112
字号
unit ZlibFileServiceImpl;

interface

uses
  ZlibFileServiceIntf, InvokeRegistry, Classes, SysUtils, EncdDecd;

type
  TZlibFileService = class(TInterfacedObject, IZlibFileService)
  public
    function GetFile(const sFileName : String) : String; stdcall;
    function GetCompressedFile(const sFileName : String) : String; stdcall;
    function GetFileSize(const sFileName : String) : Integer; stdcall;
    function GetCompressedSize(const sFileName : String) : Integer; stdcall;
  end;

implementation

uses uSoapPacketComUnCompressor;

procedure ZlibFileServiceFactory(out Obj: TObject);
begin
  Obj := TZlibFileService.Create;
end;

{ TZlibFileService }

function TZlibFileService.GetCompressedSize(const sFileName : String) : Integer;
var
  aDataStream : TStringStream;
  aMS : TMemoryStream;
begin
  Result := 0;
  if (FileExists(sFileName)) then
  begin
    aMS := TMemoryStream.Create;
    aDataStream := TStringStream.Create('');
    try
      aMS.LoadFromFile(sFileName);
      aMS.SaveToStream(aDataStream);
      Result := XTCompressedSize(aDataStream.DataString);
    finally // wrap up
      aDataStream.Free;
      aMS.Free;
    end;    // try/finally
  end;
end;

function TZlibFileService.GetCompressedFile(const sFileName: String): String;
var
  aDataStream : TStringStream;
  aMS : TMemoryStream;
begin
  Result := '';
  if (FileExists(sFileName)) then
  begin
    aMS := TMemoryStream.Create;
    aDataStream := TStringStream.Create('');
    try
      aMS.LoadFromFile(sFileName);
      aMS.SaveToStream(aDataStream);
      Result := XTToCompressSoapPacket(aDataStream.DataString);
    finally // wrap up
      aDataStream.Free;
      aMS.Free;
    end;    // try/finally
  end;
end;

function TZlibFileService.GetFileSize(const sFileName : String) : Integer;
var
  aMS : TMemoryStream;
begin
  Result := 0;
  if (FileExists(sFileName)) then
  begin
    aMS := TMemoryStream.Create;
    try
      aMS.LoadFromFile(sFileName);
      Result := aMS.Size;
    finally // wrap up
      aMS.Free;
    end;    // try/finally
  end;
end;

function TZlibFileService.GetFile(const sFileName: String): String;
var
  aDataStream : TStringStream;
  aMS : TMemoryStream;
begin
  Result := '';
  if (FileExists(sFileName)) then
  begin
    aMS := TMemoryStream.Create;
    aDataStream := TStringStream.Create('');
    try
      aMS.LoadFromFile(sFileName);
      aMS.SaveToStream(aDataStream);
      Result := EncodeString(aDataStream.DataString);
    finally // wrap up
      aDataStream.Free;
      aMS.Free;
    end;    // try/finally
  end;
end;

initialization
  InvRegistry.RegisterInvokableClass(TZlibFileService, @ZlibFileServiceFactory);

end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?