Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Zippen einer Datei abbrechen? (https://www.delphipraxis.net/191674-zippen-einer-datei-abbrechen.html)

Der schöne Günther 9. Feb 2017 09:33

Delphi-Version: 10 Seattle

Zippen einer Datei abbrechen?
 
Wie kann ich das Hinzufügen einer Datei zu einem Zip-Archiv
Delphi-Quellcode:
zipFile.Add('x:\someBigFile.dat');
abbrechen? Es gibt zwar ein
Delphi-Quellcode:
OnProgress
-Event eines
Delphi-Quellcode:
TZipFile
, aber da sehe ich keine Möglichkeit das irgendwie abzubrechen:
Delphi-Quellcode:
uses System.Zip;

procedure TZipTest.handleZipProgress(
   Sender: TObject;
   FileName: string;
   Header: TZipHeader;
   Position: Int64
);
begin
   if(bedingungErfüllt) then raise EZipException.Create('Keine Lust mehr');
end;
Mit der Exception komme ich zwar raus, allerdings mache ich mir etwas Sorgen um die Integrität der ZIP-Datei. Der Windows-Explorer kommt zwar mit zurecht, aber was heißt das schon?

Luckie 9. Feb 2017 12:15

AW: Zippen einer Datei abbrechen?
 
Normalerweise gibt es bei OnProgress Events bzw. den zugehörigen Methoden auch einen Cancel Parameter. Mit der Zip-Komponente kenne ich mich allerdings nicht aus.

pustekuchen 9. Feb 2017 12:51

AW: Zippen einer Datei abbrechen?
 
Ohne Bezug auf die ZIP-Komponente zu nehmen, könntest du das Zippen vorerst bei einer temporären Kopie durchführen. War das hinzufügen erfolgreich, kopierst du die Temporäre Datei zurück.

Neutral General 9. Feb 2017 12:55

AW: Zippen einer Datei abbrechen?
 
Zitat:

Zitat von pustekuchen (Beitrag 1361170)
Ohne Bezug auf die ZIP-Komponente zu nehmen, könntest du das Zippen vorerst bei einer temporären Kopie durchführen. War das hinzufügen erfolgreich, kopierst du die Temporäre Datei zurück.

Ich denke er will eher eine "Abbrechen"-Funktion haben. Da hilft dein Vorschlag leider nicht.

bra 9. Feb 2017 13:17

AW: Zippen einer Datei abbrechen?
 
Vielleicht solltest du auch mal genau beschreiben, was du erreichen willst. Denn das Zippen während des Packens abzubrechen und dann trotzdem noch eine korrekte, gültige ZIP-Datei zu erhalten wird auch mit den meisten anderen Programmen nicht funktionieren. I.d.R. wird die ZIP-Datei beim Abbrechen gelöscht.

pustekuchen 9. Feb 2017 13:48

AW: Zippen einer Datei abbrechen?
 
Zitat:

Zitat von Neutral General (Beitrag 1361171)
Ich denke er will eher eine "Abbrechen"-Funktion haben. Da hilft dein Vorschlag leider nicht.

Allerdings hilft das die Integrität der ZIP-Datei zu gewährleisten.
Zitat:

Zitat von Der schöne Günther (Beitrag 1361139)
Mit der Exception komme ich zwar raus, allerdings mache ich mir etwas Sorgen um die Integrität der ZIP-Datei. Der Windows-Explorer kommt zwar mit zurecht, aber was heißt das schon?


Der schöne Günther 9. Feb 2017 14:59

AW: Zippen einer Datei abbrechen?
 
Eine "Diese Datei zippen abbrechen"-Funktion wäre zwar schön, aber der Vorschlag von Pustekuchen reicht als Notlösung auch. Ich hätte nur ehrlich gesagt so etwas selbstverständliches wie ein Abbrechen erwartet.

Vielleicht kann ich, nach Überschreiten der Größe, die Datei auch wieder herausnehmen, das habe ich noch nicht geprüft.


Wen es interessiert: Ich habe einen Haufen kleiner, gut komprimierbarer Dateien. Ich möchte so viele davon wie möglich einpacken bis ich an eine Obergrenze (z.B. < 5 MB) komme.

mm1256 9. Feb 2017 16:19

AW: Zippen einer Datei abbrechen?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1361179)
Eine "Diese Datei zippen abbrechen"-Funktion wäre zwar schön, aber der Vorschlag von Pustekuchen reicht als Notlösung auch. Ich hätte nur ehrlich gesagt so etwas selbstverständliches wie ein Abbrechen erwartet....

Na ja, meistens ist das liebe Geld dran schuld. Eine vernünftige ZIP-Komponente kauft man einmal und dann nie wieder. ZipForge zum Beispiel kann einen ZIP-Vorgang abbrechen.
Delphi-Quellcode:
procedure TForm1.ZipperOverallProgress(Sender: TObject;
  Progress: Double; Operation: TZFProcessOperation;
  ProgressPhase: TZFProgressPhase; var Cancel: Boolean);
begin
  ...
end;
So nebenbei hat du auch in der ZIP-File-Größe noch Luft nach oben. :thumb:

Der schöne Günther 9. Feb 2017 16:43

AW: Zippen einer Datei abbrechen?
 
Ja, aber nur um einmal Dateien besser zippen zu können handele ich mir keine neuen Drittanbieter-Abhängigkeiten ein. Das ist im Delphi-Land alles schon kompliziert genug ;-)

EWeiss 9. Feb 2017 17:10

AW: Zippen einer Datei abbrechen?
 
Wer zippt heute noch wo es schon lange bessere Alternativen gibt.

gruss

Aviator 9. Feb 2017 17:14

AW: Zippen einer Datei abbrechen?
 
Zitat:

Zitat von EWeiss (Beitrag 1361195)
Wer zippt heute noch wo es schon lange bessere Alternativen gibt.

Ach ja? Welche denn? :?::?::?:

EDIT: Außerdem wenn er zippen will, dann soll er das doch machen. Bei uns wird das auch tagtäglich gemacht.

Aber deine angesprochenen Alternativen würden mich dennoch interessieren.

EWeiss 9. Feb 2017 17:16

AW: Zippen einer Datei abbrechen?
 
Win|Rar komprimiert ein Archiv um das mindestens 50 fache.
Hat Multipart und Möglichkeiten sein Archiv zu schützen.. bzw. wieder herzustellen.
Außerdem unterstützt es alle Archivarten inklusive Zip.

Und es gibt sogar freie Komponente die man in seinem eigenen Programm einbinden kann.

gruss

Aviator 9. Feb 2017 17:19

AW: Zippen einer Datei abbrechen?
 
Naja gut. Ist aber im Prinzip auch eine Art der Kompression. Wir benutzen bei uns 7-Zip. Funktioniert genauso gut wie Win-Rar. Teilweise auch noch besser. Vorteil von 7-Zip ist eben, dass es kostenlos ist.

Aber wie er ja auch bereits angesprochen hat, will er keine Fremdkomponenten (zumindest keine zusätzlichen) nutzen. Von daher scheidet deine Lösung wohl auch aus.

EWeiss 9. Feb 2017 17:23

AW: Zippen einer Datei abbrechen?
 
Sollte keine Lösung sein sondern ein Hinweis darauf das es bessere gibt.
Zitat:

Teilweise auch noch besser.
Möchte ich bezweifeln

Zitat:

Außerdem wenn er zippen will, dann soll er das doch machen. Bei uns wird das auch tagtäglich gemacht.
Kann er machen wie er will.
NUR wenn ich mir ein Limit von <-- 5 MB setzen und in diesem Archiv quasi 50 % mehr an Dateien packen kann bis das Limit erreicht ist
Sehe ich den sinn nicht darin Zip zu verwenden.

Und wie schon gesagt die Komponente ist frei.
So wie ich sehe gibt es sogar eine Abort Funktion.

Zitat:

Über dieses Programm können Sie:
- RAR-Archive entpacken
- den Inhalt betrachten
- Passwortunterstützung
- Unterstützung von aufgeteilten Archiven
- Fortschrittsanzeige und Entpacken stoppen
- anzeige sämtlicher Eigenschaften der Dateien im Archiv
- durch Klick auf die Spaltenüberschriften kann die Sortierrichtung geändert
werden.

Delphi-Quellcode:
WinRar.Abort;


Das wars dann schon.

gruss

Luckie 9. Feb 2017 20:30

AW: Zippen einer Datei abbrechen?
 
Nur leider steht da nichts von packen oder hast du das nur nicht mit zitiert?

Aviator 9. Feb 2017 20:59

AW: Zippen einer Datei abbrechen?
 
Zitat:

Zitat von Luckie (Beitrag 1361212)
Nur leider steht da nichts von packen oder hast du das nur nicht mit zitiert?

Würde mich nicht wundern wenn das da nicht steht. RAR ist nicht kostenlos. Entpacken darf jeder, ja. Macht 7-Zip auch. Nur als RAR packen darf/kann man nicht.

@EWeiss: Du solltest deine Beiträge nicht 1 Stunde nach dem eigentlichen absenden nochmal so grundlegend ändern. Kleinere Schreibfehler rausmachen halte ich ja noch für sinnvoll, aber so eine große Änderung. :roll:
Das ließt im Nachhinein keiner mehr wenn nicht noch ein neuer Beitrag geschrieben wird und man zufällig nochmal nach oben scrollt.

Luckie 9. Feb 2017 21:17

AW: Zippen einer Datei abbrechen?
 
Zitat:

Zitat von Aviator (Beitrag 1361215)
RAR ist nicht kostenlos. Entpacken darf jeder, ja. Macht 7-Zip auch. Nur als RAR packen darf/kann man nicht.

So habe ich das auch im Kopf.

EWeiss 10. Feb 2017 00:02

AW: Zippen einer Datei abbrechen?
 
Letztendlich liegt es an jeden selbst was er verwenden will.

gruss

Slipstream 10. Feb 2017 08:13

AW: Zippen einer Datei abbrechen?
 
Zitat:

Zitat von Luckie (Beitrag 1361212)
Nur leider steht da nichts von packen oder hast du das nur nicht mit zitiert?

Kann ich bestätigen: Dort gibt's nur zwei UnRar-Wrapper für die UnRar.dll, jedoch keinen, um Rar-Archive zu erzeugen.

Beim Archivieren eines ca. 18 MB großen Ordners mit Word-Dateien erzielt WinRar ein um 200 kb besseres Ergebnis im jeweils besten Pack-Modus.

In unseren Projekten verwenden wir seit Jahren Abbrevia, das genügt unseren Ansprüchen vollauf und ist zudem kostenlos. Eine Funktion zum Abbrechen des aktuellen Pack-Vorgangs ist mir dort aber noch nicht aufgefallen. Aber wer weiß, vielleicht gibts die ja dort trotzdem. So gut kenn ich Abbrevia jetzt wieder nicht.

Drei Tage, bevor ich mich hier angemeldet habe,gabs schonmal eine Diskussion über Archivier-Komponenten für Delphi.

bra 10. Feb 2017 09:11

AW: Zippen einer Datei abbrechen?
 
WinRAR verwende ich zwar auch oft, hat aber den Nachteil, dass man es nicht mit Windows-Bordmitteln wieder entpacken kann. Und 7Zip hat für mich einen ganz entscheidenden Nachteil: man kann defekte Archive (weil unvollständig oder mit Fehlern) nicht mehr entpacken.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:48 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