![]() |
ZipForge: Textdatei entpacken und in Stringliste einlesen
Hi,
ich möchte ZipForge verwenden, um eine Textdatei mit ca. 50000 Zeilen aus einer Zip-Datei im Arbeitsspeicher zu entpacken und in eine TStringList einzulesen. Leider kennt ZipForge nur die 4 Entpackfunktionen ExtractFiles, ExtractToBuffer, ExtractToStream und ExtractToString, wovon letztere nur die Angabe eines normalen Strings erlaubt. Das reicht für diese Datenmenge natürlich nicht aus. Geschrieben habe ich eine entsprechende Testfunktion, wie das ursprünglich mit der StringListe geplant war. Leider funktioniert ExtractToString mit diesem Parameter nicht:
Delphi-Quellcode:
Kennt jemand einen anderen Weg, die Textdatei in die StringListe einzulesen, ohne temporär eine Textdatei zu erstellen und diese wiederum einzulesen?
procedure TMainForm.bnStartClick(Sender: TObject);
var testliste : TStringList; begin testliste:=TStringList.Create; {initialize Stringlist} with Archiver do begin FileName := 'zipfile.zip'; Password := 'test'; OpenArchive; ExtractToString('TextFileWithinZipFile.txt', testliste); CloseArchive; end; ProcessStringList(testliste); {internal function to proces the contents of the stringlist} testliste.Free; {deinitialize stringlist} end; Danke für die Vorschläge. |
AW: ZipForge: Textdatei entpacken und in Stringliste einlesen
Hi,
warum verwendest DU nicht ExtractToStream? Das ganze dann in einen MemoryStream speichern und den dann über StringList.LoadFromStream in deine Stringlist bringen? |
AW: ZipForge: Textdatei entpacken und in Stringliste einlesen
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm, der Ansatz klingt gut und ich habe die Procedure umgeschrieben. Entweder arbeitet ExtractToStream nicht richtig, oder ich mache was falsch. Die Ergebnisse des Streams und damit auch der Stringliste sind nach dem Einlesen leer. Anbei noch einmal der aktuelle Code mit der Testdatei als Anhang.
Delphi-Quellcode:
Vielleicht kann jemand den entscheidenden Tipp geben...
procedure TMainForm.bnStartClick(Sender: TObject);
var testliste : TStringlist; memorystream : TStream; begin MemoryStream:=TMemoryStream.Create; with Archiver do begin FileName := 'testdatei.zip'; OpenArchive; ExtractToStream('testdatei.txt', MemoryStream); CloseArchive; end; testliste:=TStringList.Create; {initialize Stringlist} testliste.LoadFromStream(MemoryStream); MemoryStream.Free; ProcessStringList(testliste); {internal function to proces the contents of the stringlist} testliste.Free; {deinitialize stringlist} end; |
AW: ZipForge: Textdatei entpacken und in Stringliste einlesen
Delphi-Quellcode:
MemoryStream.Position := 0;
testliste.LoadFromStream(MemoryStream); |
AW: ZipForge: Textdatei entpacken und in Stringliste einlesen
Danke, das war die Lösung.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:34 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