Delphi: öffnen Sie ein zip-Archiv aus einem stream -> extrahieren einer stream -
Gibt es irgendwelche zip-Komponenten mit solchen Eigenschaften? Brauche ich zum herunterladen eines zip-Archiv aus dem Internet auf einen stream, dann zum öffnen des Archivs aus dem stream und dann zu extrahieren, Dateien zu einem anderen stream.
E. g. ZipForge öffnen können Sie ein Archiv aus einem stream ZipForge.OpenArchive(MyStream, false);
aber wie zum extrahieren von einem anderen...?
procedure ExtractToStream(FileName: WideString; Stream: TStream);
Beschreibung
Verwenden ExtractToStream Dekomprimieren von Daten in der Datei gespeichert ist im inneren der
Archiv zu einem TStream Nachkomme Objekt wie TFileStream, TMemoryStream
oder TBlobStream.Den FileName-parameter gibt die Datei-Namen extrahieren.
Ist und was die Nutzung des OpenArchive(MyStream, false)
Methode, wenn die Extraktion nicht unterstützt wird...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zip-Datei der Komponente, die in XE2 dies tun wird.
Es eine überladene
Open
Methode, erhält eineTStream
als input-Parameter.Zu extrahieren einzelner Dateien Sie können den Aufruf einer überladenen
Read
- Methode und übergeben Sie den Namen der Datei, die Sie extrahieren möchten. Die extrahierte Datei zurückgegeben wird, wie eine neue Instanz vonTStream
. Sie können, verwenden SieCopyFrom
auf diese Instanz zu übertragen, die extrahierte Datei in Ihrem stream.Beachten Sie, dass habe ich nicht getestet, diese code habe ich nur geschrieben, es basiert auf der source code für
TZipFile
und der Dokumentation enthaltenen Quell-code. Gibt es vielleicht ein paar Falten, aber wenn der code sich so verhält, wie beworben, es erfüllt Ihre Anforderungen perfekt.OK, jetzt habe ich es getestet, weil ich neugierig war. Hier ist das Programm, das zeigt, dass es funktioniert, wie beworben:
Beachten Sie, dass ich extrahiert, die durch den index eher als Dateiname da, das war bequemer für mich. Und ich verwendete Datei-streams eher als Speicher-streams, die ich mir vorstellen das Sie verwenden würde. Da jedoch die
TZipFile
Methoden der Arbeit mitTStream
ich bin mir sicher, dass der code funktioniert mit streams jeglicher form.Dies ist die neueste in einer Reihe von Fragen über ZIP-Dateien. Ich weiß, dass Sie mit XE2 und ich Frage mich, warum Sie scheinen nur ungern mit dem eingebauten ZIP-Klasse, die XE2 stellt. Ich habe nicht gesehen, nichts, um anzuzeigen, dass es nicht Ihre Anforderungen erfüllen. In der Tat ist es genau diese Fähigkeit, arbeiten direkt mit den streams, die macht mir das Gefühl, es hat genügend Allgemeingültigkeit für jede Anwendung.