![]() |
TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken
Hallo,
ich versuche, dem Zipmaster (1.9) eine gezippte Datei "unterzuschieben", die in einem TFileStream bzw. TMemoryStream (aus einem Blob-Feld) liegt. Dann soll eine Datei (die einzige in der Zip) ausgepackt werden Hier war schon eine ähnliche Frage, ohne Antwort ... ![]() Ich stehe genau dort, das er mir die gezippte Datei "auspackt". Hier ![]() wird ein gezippter Stream entpackt, aber es steht auch dort, wenn der Stream eine Zip-Datei ist, klappt der Code nicht. Man müsste aus dem Stream der Zipdatei genau die Stelle kennen, wo die Zip-Datei beginnt. Hier habe ich noch was, verstehe aber nicht ganz, was der macht ;( ![]() Per LoadFromFile klappt ja alles. Danke Heiko |
AW: TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken
Eigentlich weiß man doch, "wo" die "Zip"-Datei beginnt:
![]() |
AW: TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken
Hallo,
suchst Du sowas?
Delphi-Quellcode:
mtIndex ist eine kbMemTable (eine Datenbanktabelle, die nur im Arbeitsspeicher existiert).
procedure TfmSHSMain.acSeiteSpeichernExecute(Sender: TObject);
var Zip : TZipMaster; st : TZipStream; begin Screen.Cursor := crHourGlass; st := TZipStream.Create; Zip := TZipMaster.Create(Nil); Try try Zip.NotMainThread := false; Zip.Unattended := True; Zip.DLLDirectory := fDll_Path; Zip.ZipFileName := Application.HelpFile; Zip.AddOptions := Zip.AddOptions + [AddDirNames]; mtIndex.Locate('ID', edSeite.Tag, []); meTextEditor.Lines.SaveToStream(st); st.Position := 0; Zip.ZipStream.LoadFromStream(st); Zip.AddStreamToFile(edSeite.Text,0,FILE_ATTRIBUTE_ARCHIVE); wb.Navigate('http://localhost:' + IntToStr(hs.DefaultPort) + '/' + IntToStr(edSeite.Tag)); wb.Refresh; except on e : Exception do begin WebConfig.WriteToLogFile('acSeiteSpeichernExecute: ' + e.Message); end; end; finally Zip.Free; end; meTextEditorChange(Nil); stbTexteditor.Panels[0].Color := clGreen; Screen.Cursor := crDefault; end; meTextEditor ist ein DBMemo, das mit der Tabelle mtIndex verbunden ist und den Inhalt eines Memofeldes anzeigt (HTML-Dateien). wb ist ein TWebBrowser, der die HTML-Dateien aus meTextEditor anzeigt. edSeite.Text ist eine TDBEdit, das den Namen der HTML-Datei im ZIP-Archiv enthält. edSeite.Tag enthält den technischen Schlüssel der HTML-Datei in der Datenbanktabelle. |
AW: TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken
Hallo,
danke an beide, ich schaue es mir an. Ich glaueb, so langsam versteht ich das AddStreamToFile . PS: ich weiss nicht, wo die Datei beginnt, das soll doch der Zipmaster machen ... ;) Heiko |
AW: TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken
Hallo,
habe glaub' ich beim ersten Lesen Deine Aufgabenstellung nur halb gelesen oder verstanden... :-( Du hast das Zip im Blob und willst dieses an den Zipmaster geben um dann daraus eine Datei zu extrahieren. Meine Routine schreibt aber den Inhalt aus einem DBMemo als Datei in ein ZIP, ist also für Deine Aufgabenstellung überhaupt nicht zu gebrauchen :-( |
AW: TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken
Hallo,
passt scho ;) ich muss auch die andere Seite bauen, also Datei als TFileStream vorhanden, soll gezippt (=Zip-Datei) und in die DB geschrieben werden. ich konnte den Code nach einem Umbau auch bei mir verwenden aber: Jedesmal wird vom Zipmaster in eine Datei geschrieben, lasse ich das ZipFileName weg, bekomme ich beim AddStreamToFile eine Fehlermeldung "zip file name fehlt". Ich möchte, dass der das alles im Speicher hält. Ich vermisse ein LoadZipFileFromStream und ein SaveZipFileToStream . Kann Abbrevia das ? Aktuell: Komponente(z.B. auch ein Texteditor) -> SaveToFile Datei -> TZipmaster -> ZipDatei erzeugen als Datei -> BlobStream.LoadFrom File -> in die DB Ziel: Komponente(z.B. auch ein Texteditor) -> SaveToStream -> TZipmaster -> ZipDatei erzeugen als Stream -> in die DB Ich möchste also alle File-Operationen eliminieren. Danke Heiko |
AW: TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken
Wenn du nur Streams comprimieren willst, warum benutzt du dann DelZip und nicht ZLib?
|
AW: TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken
Hallo,
habe mal noch ein bisserl gestöbert und dabei ist folgende, ungetestete, Funktion rausgekommen (nur so als Idee):
Delphi-Quellcode:
Eventuell ist's ja ein Ansatz.
function GetZipContent(DBMemo : TDBMemo; sFileNameImZip : String) : String;
var st : TZipStream; begin DBMemo.Lines.SaveToStream(st); st.Position := 0; ZipMaster1.ZipStream.LoadFromStream(st); st.Clear; st := ZipMaster1.ExtractFileToStream(sFileNameImZip); if ZipMaster1.SuccessCnt <> 0 then begin if st.Size > 0 then begin st.Position := 0; SetLength(sContent, st.size); st.Read(sContent[1], st.size); end else begin Result := 'Die Datei ' + sFileNameImZip + ' hat keinen Inhalt.'; end; end else begin Result := 'Die Datei ' + sFileNameImZip + ' wurde nicht gefunden.'; end; end; |
AW: TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken
Hallo,
cookie22 ich muss den Code weiterentwickeln, das Original kommt nicht von mir. Ich habe eine Komponente, die kann LoadFromFile/LoadFromStream mit einer RTF-Datei/-Stream. Die RTF liegt als Zip-Datei (TZipmaster) in einem Boob-Feld in der DB. Im Moment wird die Zip-Datei ins Temp kopiert, die RTF-Datei ausgepackt und dann per LoadFromFile in die Komponente geladen. Mir wäre es lieber, auf die Temp-Datei komplett zu verzichten. nahpets Ja, kommt meinen Wünschen schon sehr naha, ich teste es mal. Danke! Heiko |
AW: TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken
Hallo,
was lange währt ... Die aktuelle Version 1.92 hat ein Property ExtStream. Dem kann man jetzt die Zip-Datei als TFileStream übergeben. Bei sämtlichen Stream-Funktionen muss man nur aufpassen, Stream.Position ggfs. auf 0 zurückzusetzen. Clevererweise haben die Entwickler auch die Dateinamen komplett geändert, so dass man die 1.92 übergangsweise zusammen mit der 1.90 verwenden kann. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:12 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