AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

zLib - FileIsCompressed

Ein Thema von stahli · begonnen am 8. Jul 2010 · letzter Beitrag vom 13. Jan 2013
Antwort Antwort
Paulman

Registriert seit: 11. Dez 2012
15 Beiträge
 
#1

AW: zLib - FileIsCompressed

  Alt 13. Jan 2013, 10:31
Hallo Stahli,

diese Thread ist zwar schon ein Stück her, aber ich habe mich jetzt auch erstmals mit der Zlib beschäftigt.
Hast du diese Procedure so in Benutzung?
Wenn ich diese so compiliere erhalte ich zunächst die Meldung "Inkompatible Typen: 'WideChar' und 'Char'"
in der letzten Zeile if EF then CopyFile(FileNameFrom, FileNameTo, False); Ich hab das erst mal auskommentiert und somit tuts was es soll. Zu Testzwecken habe ich mir erst mal ein "showMessage.. eingebaut, dazu kommt es aber garnicht erst.
Nun hab ich aber tatsächlich eine unkompriemierte Datei geladen, damit kriege ich sofort eine exeption bei EF := not DecompressStream(FSC, FSD); Was mich auch wundert, ist die Meldung "Variable 'ds' ist möglicherweise nicht initialisiert worden".

Arbeitest du selber mit dieser funktion? Ich würde mir diese gerne mit einbauen, dazu sollte aber das Problem bei unkomrimierten Datein behoben werden, ich weiß nur nicht wie.

Viele Grüße!
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: zLib - FileIsCompressed

  Alt 13. Jan 2013, 12:46
Ich habe noch 2 kleine Änderungen eingebaut und das so praktisch im Einsatz.
Man kann die Komprimierung jetzt auch über ein Flag abschalten.

Unter Debugkontrolle werden auftretende Exceptions angezeigt, ohne Debuger dann nicht mehr.

Delphi-Quellcode:
unit ssZip;

interface

uses
  Classes;

procedure CompressStream(inStream, outStream: TStream);
function DecompressStream(inStream, outStream: TStream): Boolean;
procedure CopyFileCompress(FileNameFrom, FileNameTo: PWideChar);
procedure CopyFileDecompress(FileNameFrom, FileNameTo: PWideChar);

var
  DoNotCompress: Boolean = False;

implementation

uses
  ZLib, Windows, SysUtils;

const
  BUFSIZE = 1024 * 16;

procedure CompressStream(inStream, outStream: TStream);
var
  cs: TCompressionStream;
begin
  inStream.Position := 0;
  outStream.Size := 0;
  if inStream.Size > 0 then
  begin
    cs := TCompressionStream.Create(clDefault, outStream);
    cs.CopyFrom(inStream, 0); // copy all
    cs.Free;
  end;
end;

function DecompressStream(inStream, outStream: TStream): Boolean;
var
  ds: TDecompressionStream;
  buf: string;
begin
  Result := True;
  inStream.Position := 0;
  outStream.Size := 0;
  if inStream.Size > 0 then
  begin
    ds := TDecompressionStream.Create(inStream);
    try
      repeat
        SetLength(buf, BUFSIZE);
        SetLength(buf, ds.Read(buf[1], BUFSIZE));
        if Length(buf) = 0 then
          Break;
        outStream.Write(buf[1], Length(buf));
      until buf = '';
    except
      Result := False;
    end;
    ds.Free;
  end;
end;

procedure CopyFileCompress(FileNameFrom, FileNameTo: PWideChar);
var
  FSC, FSD: TFileStream;
begin
  if DoNotCompress then
    CopyFile(FileNameFrom, FileNameTo, False)
  else
  begin
    FSD := TFileStream.Create(String(FileNameFrom), fmOpenRead);
    FSC := TFileStream.Create(String(FileNameTo), fmCreate);
    CompressStream(FSD, FSC);
    FreeAndNil(FSD);
    FreeAndNil(FSC);
  end;
end;

procedure CopyFileDecompress(FileNameFrom, FileNameTo: PWideChar);
var
  FSC, FSD: TFileStream;
  EF: Boolean;
begin
  FSC := TFileStream.Create(String(FileNameFrom), fmOpenRead);
  FSD := TFileStream.Create(String(FileNameTo), fmCreate);
  EF := not DecompressStream(FSC, FSD);
  FreeAndNil(FSC);
  FreeAndNil(FSD);
  if EF then
    CopyFile(FileNameFrom, FileNameTo, False);
end;

end.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Paulman

Registriert seit: 11. Dez 2012
15 Beiträge
 
#3

AW: zLib - FileIsCompressed

  Alt 13. Jan 2013, 21:23
Super, danke!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz