Einzelnen Beitrag anzeigen

philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
859 Beiträge
 
Delphi 10.4 Sydney
 
#1

Decompress einer gz-Datei mit NULL-Zeichen

  Alt 3. Jul 2019, 15:16
Hi,

bisher decompresse ich gz-Dateien mit folgendem Code:

Delphi-Quellcode:
uses System.Zlib;

class function TStringUtils.gzUnzip(filename:String):TStringList;
var
   LInput:TFileStream;
   LUnZip:TZDecompressionStream;
begin
   Result:=TStringList.Create(true);
   LInput:=TFileStream.Create(filename,fmOpenRead + fmShareDenyNone);
   LUnZip:=TZDecompressionStream.Create(LInput,15+32);
   Result.LoadFromStream(LUnzip);
   LUnZip.Free;
   LInput.Free;
end;
Jetzt funktioniert dies leider nicht mit gz-Dateien, wo ein NULL-Zeichen enthalten ist. Dort enthält das Result dann nur den File-Inhalt bis zum NULL-Zeichen.
Wenn ich den Umweg über eine Datei gehe, welche ich dann in einem zweiten Schritt einlese, geht es zwar, ist aber inperformant, das mache ich eigentlich nur das riesen gz-Files:
Delphi-Quellcode:
class procedure TStringUtils.gzUnzipToFile(readFile,writeFile:String);
var
   LInput,LOutput:TFileStream;
   LUnZip:TZDecompressionStream;
begin
   LOutput:=TFileStream.Create(writeFile,fmCreate);
   LInput:=TFileStream.Create(readFile,fmOpenRead+fmShareDenyNone);
   LUnZip:=TZDecompressionStream.Create(LInput,15+32);
   LOutput.CopyFrom(LUnZip,0);
   LUnZip.Free;
   LInput.Free;
   LOutput.Free();
end;
Wie bekomme ich es hin, dass ich ohne den Umweg über eine Datei das gz-File komplett in meine TStringList bekomme?


Grüße, Philipp
  Mit Zitat antworten Zitat