Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   ZLIB, Umstellung v. D7 auf XE3, mit Problemen (https://www.delphipraxis.net/179965-zlib-umstellung-v-d7-auf-xe3-mit-problemen.html)

waldforest 14. Apr 2014 12:39

ZLIB, Umstellung v. D7 auf XE3, mit Problemen
 
Hallo,
in meiner bisherigen Anwendung nutze ich die ZLIB zur Komprimierung und decomprimierung von Files mit folgendem Code von SwissDelphiCenter http://www.swissdelphicenter.ch/de/showcode.php?id=1617.

Unter D7 lief dieser sauber, mit der Umstellung auf XE3 funktioniert dieser nicht mehr, weder neu erstellte, noch alte komprimierte Files lassen sich entpacken.
Ich kann mir nicht erklären woran es liegt, kann mir jemand auf die Sprünge helfen.

Gibt es unterschiede in der Compremierungsmethoden in der ZLIB ?

Delphi-Quellcode:
uses
   Zlib;

procedure CompressFiles(Files : TStrings; const Filename : String);
var
   infile, outfile, tmpFile : TFileStream;
   compr : TCompressionStream;
   i,l : Integer;
   s : String;

begin
   if Files.Count > 0 then
   begin
     outFile := TFileStream.Create(Filename,fmCreate);
     try
       { the number of files }
       l := Files.Count;
       outfile.Write(l,SizeOf(l));
       for i := 0 to Files.Count-1 do
       begin
         infile := TFileStream.Create(Files[i],fmOpenRead);
         try
           { the original filename }
           s := ExtractFilename(Files[i]);
           l := Length(s);
           outfile.Write(l,SizeOf(l));
           outfile.Write(s[1],l);
           { the original filesize }
           l := infile.Size;
           outfile.Write(l,SizeOf(l));
           { compress and store the file temporary}
           tmpFile := TFileStream.Create('tmp',fmCreate);
           compr := TCompressionStream.Create(clMax,tmpfile);
           try
             compr.CopyFrom(infile,l);
           finally
             compr.Free;
             tmpFile.Free;
           end;
           { append the compressed file to the destination file }
           tmpFile := TFileStream.Create('tmp',fmOpenRead);
           try
             outfile.CopyFrom(tmpFile,0);
           finally
             tmpFile.Free;
           end;
         finally
           infile.Free;
         end;
       end;
     finally
       outfile.Free;
     end;
     DeleteFile('tmp');
   end;
end;

procedure DecompressFiles(const Filename, DestDirectory : String);
var
   dest,s : String;
   decompr : TDecompressionStream;
   infile, outfile : TFilestream;
   i,l,c : Integer;
begin
   // IncludeTrailingPathDelimiter (D6/D7 only)
   dest := IncludeTrailingPathDelimiter(DestDirectory);

   infile := TFileStream.Create(Filename,fmOpenRead);
   try
     { number of files }
     infile.Read(c,SizeOf(c));
     for i := 1 to c do
     begin
       { read filename }
       infile.Read(l,SizeOf(l));
       SetLength(s,l);
       infile.Read(s[1],l);
       { read filesize }
       infile.Read(l,SizeOf(l));
       { decompress the files and store it }
       s := dest+s; //include the path
       outfile := TFileStream.Create(s,fmCreate);
       decompr := TDecompressionStream.Create(infile);
       try
         outfile.CopyFrom(decompr,l);
       finally
         outfile.Free;
         decompr.Free;
       end;
     end;
   finally
     infile.Free;
   end;
end;

baumina 14. Apr 2014 13:05

AW: ZLIB, Umstellung v. D7 auf XE3, mit Problemen
 
Versuch mal den String für read und write jeweils als AnsiString zu deklarieren.

waldforest 14. Apr 2014 13:21

AW: ZLIB, Umstellung v. D7 auf XE3, mit Problemen
 
Hallo,
vielen Dank, funktioniert !!


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz