AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Datei zippen/ entzippen: TZipmaster oder Abbrevia

Datei zippen/ entzippen: TZipmaster oder Abbrevia

Ein Thema von hoika · begonnen am 1. Jun 2016 · letzter Beitrag vom 3. Jun 2016
Antwort Antwort
Seite 1 von 2  1 2   
hoika

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

Datei zippen/ entzippen: TZipmaster oder Abbrevia

  Alt 1. Jun 2016, 08:09
Hallo,
ich suche eine Möglichkeit, ein Zip-Archiv (normales zip, kein gzip oder 7zip)
zu entpacken und wieder ein Archiv zu erzeugen.

Das ganze möglichst direkt über Streams.

Im Moment nehme ich den Zipmaster.
Nachteil ist, dass ich halt keine Streams benutzen kann.
Es läuft immer auf Dateien aus.

Abbrevia wäre die Alternative
http://tpabbrevia.sourceforge.net/

Ich versteht aber die Lizenz nicht
https://www.mozilla.org/en-US/MPL/1.1/

Darf ich denn jetzt ich kommerzielle Anwendungen damit entwickeln?


Danke

Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.594 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Datei zippen/ entzippen: TZipmaster oder Abbrevia

  Alt 1. Jun 2016, 08:24
evtl ist das aktueller

https://github.com/ezurschmiede/Abbrevia

Ich dachte immer Mozilla PL ist immer für kommerziell.
Sven Harazim
--
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Datei zippen/ entzippen: TZipmaster oder Abbrevia

  Alt 1. Jun 2016, 08:25
Ich versteht aber die Lizenz nicht
https://www.mozilla.org/en-US/MPL/1.1/

Darf ich denn jetzt ich kommerzielle Anwendungen damit entwickeln?
IANAL, aber soweit ich das verstehe: Ja. Du musst nur einen Link in der AboutBox unterbringen (Vermerk im Handbuch geht glaub ich auch ).
Uli Gerhardt
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: Datei zippen/ entzippen: TZipmaster oder Abbrevia

  Alt 1. Jun 2016, 11:03
Hallo,
ich suche eine Möglichkeit, ein Zip-Archiv (normales zip, kein gzip oder 7zip)
zu entpacken und wieder ein Archiv zu erzeugen.

Das ganze möglichst direkt über Streams.

Im Moment nehme ich den Zipmaster.
Nachteil ist, dass ich halt keine Streams benutzen kann.
Es läuft immer auf Dateien aus.
Ich nehme auch immer den Zip-Master und das geht auch mit Streams.

Hier ein Auszug aus 'ner Klasse, mit der ich EPubs erstelle:
Delphi-Quellcode:
...

    // sEPubFilename ist der "Datei"-Name, unter dem der Stream im Zip-Archiv abgelegt wird.
    // Einen String, der eine vollständige Datei (HTML-Seite...) repäsentiert,
    // in die EPub-Datei übernehmen.
    function CopyToEPub(sInhalt : String; sEPubFilename : String) : Boolean; overload;
    // Inhalt einer Stringliste als Datei in die EPub-Datei übernehmen.
    function CopyToEPub(sl : TStrings; sEPubFilename : String) : Boolean; overload;
    // Einen Stream als Datei in die EPub-Datei übernehmen.
    // Hierbei kann es sich um alles handeln, was man in eine ZIP-Datei packen kann.
    function CopyToEPub(st : TMemoryStream; sEPubFilename : String) : Boolean; overload;
...


...
// Wir bekommen eine Zeichenfolge, die eine vollständige Seite enthält.
function TEPub.CopyToEPub(sInhalt : String; sEPubFilename : String) : Boolean;
var
         sl : TStringList;
         st : TMemoryStream;
begin
  sl := TStringList.Create;
  st := TMemoryStream.Create;
  try
    sl.Add(sInhalt);
    sl.SaveToStream(st);
    Result := CopyToEPub(st,sEPubFilename);
  finally
    st.Free;
    sl.Free;
  end;
end;

// Wir bekommen eine Stringliste, die eine vollständige Seite enthält.
function TEPub.CopyToEPub(sl : TStrings; sEPubFilename : String) : Boolean;
var
          st : TMemoryStream;
begin
  st := TMemoryStream.Create;
  try
    sl.SaveToStream(st);
    Result := CopyToEPub(st,sEPubFilename);
  finally
    st.Free;
  end;
end;

// Die Übernahme in das eBook kann nur per Stream erfolgen.
// Wir bekommen hier einen Stream, der eine vollständige Seite enthält.
// Es kann sich aber auch um Bilder... handeln, halt alles, was man in ein
// Zip packen kann.
function TEPub.CopyToEPub(st : TMemoryStream; sEPubFilename : String) : Boolean;
begin
  Result := false;
  if Assigned(fOnEPubMessage) then fOnEPubMessage(Self, Format('speichere %s...',[sEPubFileName]));
  Application.ProcessMessages;
  try
    try
      st.Position := 0;
      fZip.ZipStream.LoadFromStream(st);
      fZip.AddStreamToFile(sEPubFilename,0,FILE_ATTRIBUTE_ARCHIVE);
      st.Clear;
      Result := True;
      if Assigned(fOnEPubStatus) then fOnEPubStatus(Self, Format('%s wurde gespeichert.',[sEPubFileName]));
    except
      on e : Exception do begin
        if Assigned(fOnEPubException) then fOnEPubException(Self,'CopyToEPub: ' + e.Message)
        else raise Exception.Create(e.Message) at @TEPub.CopyToEPub;
      end;
    end;
  finally
  end;
  Application.ProcessMessages;
end;
...
Oder meintest Du mit Deiner Fragestellung, dass Du die ZIP-Datei als Stream verwenden willst, also das Archiv selbst nur im Speicher existiert und nicht als Datei?
  Mit Zitat antworten Zitat
hoika

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

AW: Datei zippen/ entzippen: TZipmaster oder Abbrevia

  Alt 1. Jun 2016, 15:53
Hallo,
danke für das Beispiel.

Ja, ich will die Zipdatei nicht auf der Platte haben.
Die Zipdatei ist in einem Blob-Feld in der DB.

Ich habe also einen TMemoryStream, dort ist die Zipdatei drin.

Ab der 1.92 geht ja angeblich was mit ExtStream, aber irgendwie klappt das bei mir nicht,
so wie hier beschrieben.

http://www.delphizip.org/192/help/un...e_examples.htm
procedure TForm1.UnzToFile2;



Delphi-Quellcode:
var
  ZM: TZipMaster;
  MS: TMemoryStream;
begin
  ZM:= TZipMaster.Create;
  MS.Position := 0;
  ZM.ExtStream.CopyFrom(MS, 0);
Irgendwie so.

Aber du hast ja
fZip.ZipStream.LoadFromStream(st);
genommen.

Heiko
Heiko

Geändert von hoika ( 1. Jun 2016 um 16:00 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: Datei zippen/ entzippen: TZipmaster oder Abbrevia

  Alt 1. Jun 2016, 16:28
Bei meinem Beispiel handelt es sich halt um eine ZIP-Datei auf der Platte, es ist für Dich, da Du das Zip ja in 'ner DB hast, nicht geeignet.

Wie man ein ZIP als Stream handhabt, weiß ich nicht, hab's noch nicht ausprobiert.

aber ich rate jetzt mal so als Idee:
Delphi-Quellcode:
procedure TForm1.CopyToZip;
var
  Idx: Integer;
  SourceStream: TStream;
  ZEntry: TZMDirEntry;
  ZM: TZipMaster;
  st: TMemoryStream;
begin
  ZM := TZipMaster.Create(nil);
  // Hierein kommt das, was ins ZIP übernommen werden soll
  st := TMemoryStream.Create;
  // st irgendwie irgendwoher befüllen
  try
    SourceStream := hier den Blobinhalt in den Stream kopieren;
    try
      ZM.ExtStream := SourceStream; // connect to ZipMaster
      if ZM.ErrCode <> 0 then
        raise Exception.Create('Invalid zip file: ' + ZM.ErrMessage);
      st.Position := 0;
      ZM.ZipStream.LoadFromStream(st);
      ZM.AddStreamToFile('Dateiname im ZIP',0,FILE_ATTRIBUTE_ARCHIVE);
      SourceStream ins Blob kopieren
    finally
      SourceStream.Free;
    end;
  finally
    st.Free;
    ZM.Free;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.986 Beiträge
 
Delphi 12 Athens
 
#7

AW: Datei zippen/ entzippen: TZipmaster oder Abbrevia

  Alt 1. Jun 2016, 16:46
Was spricht denn gegen TZipfile aus System.Zip.pas? Das hat doch ein overload für Open, dem man auch einen TStream mitgeben kann.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#8

AW: Datei zippen/ entzippen: TZipmaster oder Abbrevia

  Alt 1. Jun 2016, 17:02
Was spricht denn gegen TZipfile aus System.Zip.pas? Das hat doch ein overload für Open, dem man auch einen TStream mitgeben kann.
Ok, gibt es seit XE2, bei meinem alten Delphi 7 nicht dabei.

Laut Doku könnte es aber zum ZIP-Master weitgehend kompatibel sein (so auf die Schnelle mal drübergeschaut) und damit der Änderungsaufwand vertretbar sein.
  Mit Zitat antworten Zitat
hoika

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

AW: Datei zippen/ entzippen: TZipmaster oder Abbrevia

  Alt 1. Jun 2016, 18:32
Hallo,
TZipFile kann meines Wissens keine passwortgeschützen Zips.

Das ganze hat sich glaube ich aber erledigt.

Der Link in meinem vorigen Beitrag funktioniert, k.A., was ich da falsch gemacht hatte.

Jetzt geht es weiter mit dem Zippen, mal schauen.


Danke an alle.


Heiko
Heiko

Geändert von hoika ( 1. Jun 2016 um 18:38 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.109 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Datei zippen/ entzippen: TZipmaster oder Abbrevia

  Alt 1. Jun 2016, 18:50
Ich wollte auch erst das ganz normale TZipFile vorschlagen, aber das hatte bei XE4 (das hast du angegeben) noch keinen Umgang mit Streams, erst später.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 05:17 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