AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XE - TZipFile.ExtractZipFile - Dateigröße immer 0

Ein Thema von Perlsau · begonnen am 15. Mai 2013 · letzter Beitrag vom 16. Mai 2013
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: XE - TZipFile.ExtractZipFile - Dateigröße immer 0

  Alt 16. Mai 2013, 00:05
Die ZIP-Dateien haben das Extended-Local-Header-Bit gesetzt und damit kann TZipFile leider nicht umgehen. Du solltest dich vielleicht nach einer anderen Bibliothek umsehen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

AW: XE - TZipFile.ExtractZipFile - Dateigröße immer 0

  Alt 16. Mai 2013, 00:20
Es gibt zig Arten von Zip Dateien. Delphi Zip unterstützt AFAIK nur Version 2.0 mit Deflate.
Alles andere wie Zip64, BZIP, LZMA u.s.w. wird von Delphi eh nicht unterstützt. Vielleicht liegt es ja daran.
Sind die Zip-Dateien eventuell verschlüsselt?
Ich vermute sowas, hab' aber keine Ahnung, wie ich das herausbekommen kann und ob mir das dann auch weiterhilft ...

Die ZIP-Dateien haben das Extended-Local-Header-Bit gesetzt und damit kann TZipFile leider nicht umgehen.
Offenbar hast du dir eine dieser Zip-Dateien angesehen. Dann muß ich System.Zip wohl erstmal vergessen, schade eigentlich ...

Du solltest dich vielleicht nach einer anderen Bibliothek umsehen.
In meiner eigenen IDE hab ich Abbrevia installiert. Doch arbeite ich gerade mal wieder an einem Kunden-PC mit XE2 unter Win7 (statt bei mir zu Hause mit 2009 unter XP), und hier ist mir die Installation von Abbrevia nicht gelungen. Natürlich hatte ich bereits eine kleine Recherche veranstaltet, um eine brauchbare Zip-Bibliothek zu finden, aber noch keine installiert und ausprobiert. Es gibt ja so viele, da könnt' ich die ganze Nacht mit verbringen. Hatte ich doch im Ernst geglaubt, ich schaff' die gestellte Aufgabe heute nacht noch ... Hast du vielleicht gerade eine brauchbare Empfehlung zur Hand

Vielleicht gibt's ja 7Zip für Delphi, das wäre Klasse, 7Zip entpackt eigentlich fast alles ...
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

Problem gelöst

  Alt 16. Mai 2013, 01:42
Die Lösung lautet vorerst (falls Scheffe morgen früh keine Einwände hat) ZipMaster von DelphiZip. Das sind zwei DLLs, je eine für 32bit und 64bit. Installiert wird die ZipMaster-Komponente. Und die scheint alles zu können, was man von einer Zip-Komponente so erwartet ... bis jetzt. Die Benutzung gestaltet sich recht einfach: Dem Property Filename wird der Dateiname des Zipfiles zugewiesen, mit der Funktion Extract werden alle Inhalte extrahiert. Wie man nur ganz bestimmte Files aus dem Archiv herausholt, hab ich noch nicht herausgefunden ...
Delphi-Quellcode:
function TForm_Downloads.PostCodeListe_Aktualisieren : String;
Const
     Suff = '.zip';
VAR
   i,z,R,a : Integer;
   Datei,
   UrlBase,
   UrlText : String;
   Strom : TFileStream;

begin
   UrlBase := DatMod.Aset_Benutzer.FieldByName('Zip_Dump').AsString;

   IF DatMod.GetPostCodeListe(ListBox_Daten.Items) THEN
   BEGIN
      z := ListBox_Daten.Count;
      Label_Anzahl.Caption := IntToStr(z) + ' Dateien werden jetzt heruntergeladen ...';
      Application.ProcessMessages;

      FOR i := 0 TO z-1 DO
      BEGIN
         ListBox_Daten.ItemIndex := i;
         UrlText := UrlBase + ListBox_Daten.Items[i] + Suff;
         Datei := DownDir + ListBox_Daten.Items[i] + Suff;
         Try
            Strom := TFileStream.Create(Datei,fmCreate,fmShareDenyNone);
            HTTP_Down.Get(UrlText,Strom);

         Finally
            FreeAndNil(Strom);
         End;
         Application.ProcessMessages;
      END;

      ShowMessage('Herunterladen von ' + IntToStr(z) + ' Dateien beendet.');

      Label_Anzahl.Caption := IntToStr(z) + ' Dateien werden jetzt entpackt ...';
      Application.ProcessMessages;
      ZipMast.ExtrBaseDir := DownDir;
      a := 0;

      FOR i := 0 TO z-1 DO
      BEGIN
         ListBox_Daten.ItemIndex := i;
         Datei := DownDir + ListBox_Daten.Items[i] + Suff;
         IF FileExists(Datei) AND (KleineTools.GetFileSize1(Datei) > 0) THEN
         Try
            ZipMast.Active := True;
            ZipMast.ZipFileName := Datei;
            R := ZipMast.Extract;
            IF R = 0 THEN
            BEGIN
               DeleteFile(Datei);
               INC(a);
            END;

         Finally
            ZipMast.Active := False;
         End;
         Application.ProcessMessages;
      END;

      Datei := DownDir + 'readme.txt';
      IF FileExists(Datei) THEN DeleteFile(Datei);

      ShowMessage('Entpacken von ' + IntToStr(a) + ' Dateien beendet.');
   END;
end;

Geändert von Perlsau (16. Mai 2013 um 02:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

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

AW: XE - TZipFile.ExtractZipFile - Dateigröße immer 0

  Alt 16. Mai 2013, 03:18
Du bist mit einer anderen Bibliothek sicher besser beraten. DelZip ist OK. Abbrevia auch. Wenn du die 7Zip DLL benutzen willst, schau mal hier: http://www.rg-software.de/rg/index.p..._content&id=29

Wenn du die JCL installiert hast, kannst du auch die benutzen. Da gibt es einen Wrapper für die 7Zip DLL.
Gruß
Cookie
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: XE - TZipFile.ExtractZipFile - Dateigröße immer 0

  Alt 16. Mai 2013, 07:16
Du bist mit einer anderen Bibliothek sicher besser beraten.
Meinst du damit anders als System.Zip oder als anders als ZipMaster von DelphiZip?

DelZip ist OK.
Das ist also was anderes als Zipmaster

Abbrevia auch.
Das hatte ich bereits versucht, erhielt aber Fehlermeldungen beim Installationsversuch unter XE2. Die genauen Meldungen weiß ich nicht mehr ... ich kann hier auch nicht mehr lange machen, bin erstens übermüdet und Scheffe kommt auch demnächst und will an seinen Rechner ...

Wenn du die 7Zip DLL benutzen willst, schau mal hier:
Das schaue ich mir von zu Hause nachher mal an ... hört sich vielversprechend an

Wenn du die JCL installiert hast, kannst du auch die benutzen. Da gibt es einen Wrapper für die 7Zip DLL.
Die hab ich, das schau ich mir sogar gleich mal an

Danke für die wertvollen Tips
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: XE - TZipFile.ExtractZipFile - Dateigröße immer 0

  Alt 16. Mai 2013, 07:15
Hast du vielleicht gerade eine brauchbare Empfehlung zur Hand
Ohne da jetzt umfangreiche Vergleiche angestellt zu haben, bin ich seit langem mit ZipForge sehr zufrieden. Kommt ohne externe DLLs aus.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: XE - TZipFile.ExtractZipFile - Dateigröße immer 0

  Alt 16. Mai 2013, 07:20
Ohne da jetzt umfangreiche Vergleiche angestellt zu haben, bin ich seit langem mit ZipForge sehr zufrieden. Kommt ohne externe DLLs aus.
Das kann ich sowieso nicht selber entscheiden, aber ich werd' meinen Auftraggeber darauf hinweisen, sobald er eingetroffen ist, vielleicht investiert er ja die 99 Euro ...

Mit Zipmaster scheint's aber auch gut zu funktionieren, und das kostet nix
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

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

AW: XE - TZipFile.ExtractZipFile - Dateigröße immer 0

  Alt 16. Mai 2013, 07:24
ZipMaster = DelZip.

ZipForge ist auch gut. Kostet halt €100.
Gruß
Cookie
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#9

AW: XE - TZipFile.ExtractZipFile - Dateigröße immer 0

  Alt 16. Mai 2013, 08:11
ZipMaster = DelZip.
Okay, dann bleib ich bei ZipMaster. Es gibt ja sooo viele, allein bei SourceCodeOnline werden hunderte angeboten ... wer will sich das alles auch nur anschauen, geschweige denn installieren und ausprobieren Ich hab ja auch noch andere Probleme
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.395 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: XE - TZipFile.ExtractZipFile - Dateigröße immer 0

  Alt 16. Mai 2013, 09:44
falls Du mal Interesse an 7zip hast, ich arbeite damit:
http://code.google.com/p/d7zip/

ist etwas komplizierter, weil alles per Source passiert, und was ich als Nachteil empfinde: Beim Entpacken musst Du vor dem Öffnen des Archivs wissen ob das ein zip oder 7z Archiv ist und das entsprechende Interface verwenden. Aber als einfach zu integrierende Lösung ganz nett.

GRüße
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:21 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