AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken
Thema durchsuchen
Ansicht
Themen-Optionen

TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken

Ein Thema von hoika · begonnen am 10. Sep 2013 · letzter Beitrag vom 6. Nov 2014
Antwort Antwort
Seite 1 von 2  1 2      
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#1

TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken

  Alt 10. Sep 2013, 09:25
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 ...

http://www.delphipraxis.net/99880-tz...-anwenden.html

Ich stehe genau dort, das er mir die gezippte Datei "auspackt".

Hier
http://www.freelists.org/post/delphizip/Hello,860
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 ;(

http://quide.googlecode.com/svn/trun...ileStorage.pas

Per LoadFromFile klappt ja alles.

Danke


Heiko
Heiko

Geändert von hoika (10. Sep 2013 um 09:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ralfschwalbe
ralfschwalbe

Registriert seit: 19. Jul 2007
Ort: Lichtenstein/Sachsen
133 Beiträge
 
Delphi XE3 Professional
 
#2

AW: TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken

  Alt 10. Sep 2013, 09:55
Eigentlich weiß man doch, "wo" die "Zip"-Datei beginnt: http://en.wikipedia.org/wiki/Zip_(fi...)#File_headers
Ralf Schwalbe
viele Grüße...
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken

  Alt 10. Sep 2013, 12:10
Hallo,

suchst Du sowas?

Delphi-Quellcode:
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;
mtIndex ist eine kbMemTable (eine Datenbanktabelle, die nur im Arbeitsspeicher existiert).
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.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken

  Alt 10. Sep 2013, 16:56
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
Heiko
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken

  Alt 10. Sep 2013, 18:45
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken

  Alt 10. Sep 2013, 18:53
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#7

AW: TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken

  Alt 10. Sep 2013, 19:10
Wenn du nur Streams comprimieren willst, warum benutzt du dann DelZip und nicht ZLib?
Gruß
Cookie
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#8

AW: TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken

  Alt 10. Sep 2013, 19:20
Hallo,

habe mal noch ein bisserl gestöbert und dabei ist folgende, ungetestete, Funktion rausgekommen (nur so als Idee):
Delphi-Quellcode:
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;
Eventuell ist's ja ein Ansatz.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken

  Alt 11. Sep 2013, 23:27
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
Heiko
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: TZipmaster: LoadFromStream(Zip-Datei) und dann Datei entpacken

  Alt 6. Nov 2014, 09:35
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
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:59 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