AGB  ·  Datenschutz  ·  Impressum  







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

TZipFile und Add

Ein Thema von Willie1 · begonnen am 30. Jan 2021 · letzter Beitrag vom 1. Feb 2021
Antwort Antwort
Willie1

Registriert seit: 28. Mai 2008
691 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

TZipFile und Add

  Alt 30. Jan 2021, 18:18
Hallo Leute,
da ich TZipFile zum ersten Mal benutze, will ich zuerst üben.
Ich stelle fest, dass ich mit Add eine Datei, auch mehrmals, zu einem Archiv hinzufüge. Das Aktualisieren, das bedeutet überschreiben einer vorhandenen Datei ist nicht möglich, ist das richtig?
Ich stelle weiter fest, dass Dateien unter dem gleichen Namen mehrmals auftauchen können, ich kann sie also über den Namen nicht alle ansprechen! (ich weiß, es geht über den Index)

Nochmal meine Frage: kann ich eine vorhandene Datei im Archiv überschreiben?
Etwas Code:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  if fod.Execute then begin
    if fod2.Execute then begin
      with TZipfile.Create do
      try
        if IsValid(fod.FileName) then begin
          open(fod.FileName, zmReadWrite);
          Add(fod2.FileName);
          Close;
        end;
      finally
        Free;
      end;
    end;
  end;
end;
Gruß Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.316 Beiträge
 
Delphi 12 Athens
 
#2

AW: TZipFile und Add

  Alt 31. Jan 2021, 02:33
Du kannst natürlich auch ein "if Exists() IndexOf() >= 0 then Delete()" vor dein Add() packen, dann ist das wie ein überschreiben/updaten.
[edit] Ach du scheiße, die Delphiimplementation kann nur aufnehmen, aber nichts mehr löschen. [/edit]

Über den Namen kommst natürlich nicht an alle "gleichnamigen" Einträge, aber via Index kann man auch noch zugreifen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (31. Jan 2021 um 02:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: TZipFile und Add

  Alt 31. Jan 2021, 09:10
Ein ZIP-File ist eine Abfolge von Streams zusammengehalten von einem Verzeichnis dafür. Einen Stream davon ersetzen ist nicht so einfach möglich, es sei denn man verschiebt die darauffolgenden Streams und passt die jeweiligen Verzeichniseinträge an. Das ist aber in vielen Fällen aufwändiger und langsamer als die Zip-Datei komplett neu zu erstellen.

Ich kann jetzt nicht für alle sprechen, aber einige ZIP-Programme erstellen für sowas eine temporäre Zip-Datei, löschen dann die alte und benennen die temporäre um.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
691 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

AW: TZipFile und Add

  Alt 31. Jan 2021, 17:54
Danke Freunde für die schnellen Antworten.
Ein Zip-Archiv kann im Gegensatz zum Explorer mehrere Dateien mit dem gleichen Namen enthalten. Beim Auspacken wird man dann vor dem Überschreiben gefragt. Das habe ich gelernt.

Ich muss erklären, warum ich ein Archiv benutze. Ich habe ein Zip-Archiv als einfaches Backup angelegt. Es enthält ca. 100 Dateien, deren aktuelle(=4) sich ständig ändern. Bisher habe ich das mit 7z oder dem Explorer gemacht. Ich möchte es jetzt in das Programm integrieren. (Speichern als Backup im Zip-Archiv). Ich habe gedacht, ich könnte das einfach überschreiben. Jetzt weiß ich, das geht nicht.
Wie muss ich vorgehen?
  1. Das Backup-Archiv in Temp entpacken (ExtractAll)
  2. die neue Datei dorthin kopieren (die alte Überschreiben)
  3. und dann das Archiv wieder neu anlegen, wo es vorher war.
Aufgaben richtig beschrieben?

Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.316 Beiträge
 
Delphi 12 Athens
 
#5

AW: TZipFile und Add

  Alt 31. Jan 2021, 17:57
Mit der Hauseigenen Klasse, mußt du die alte Zip lesend öffnen
und zugleich eine neue ZIP erstellen.

Die unveränderten Dateien kopierst dann von der Einen in die Andere (kannst ja via MemoryStream innerhalb des Programms machen)
und dann fügst deine neuen Dateien ein.
Zuzüglich nachher/vorher noch die ZIP löschen/umbenennen, damit die neue ZIP den alten Namen bekommen kann.



Alternativ hängst eben immer nur deine neuen Dateien an und bekommst dann das mit dem "soll überschrieben werden?" beim Entpacken.
Im Prinzip hast so ja auch gleich ein Multibackup in einer Datei. (im Prinzip kann man sich da ja auch die alten Dateien noch rausholen)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
691 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

AW: TZipFile und Add

  Alt 31. Jan 2021, 18:18
Zitat:
(kannst ja via MemoryStream innerhalb des Programms machen)
und dann fügst deine neuen Dateien ein.
Ich brauche nicht den Umweg über Temp zu gehen?
Zitat:
Alternativ hängst eben immer nur deine neuen Dateien an und bekommst dann das mit dem "soll überschrieben werden?" beim Entpacken.
Im Prinzip hast so ja auch gleich ein Multibackup in einer Datei. (im Prinzip kann man sich da ja auch die alten Dateien noch rausholen)
Wenn ich auf [Alle Überschreiben] klicke, bleibt dann immer die neuste Version beim Entpacken erhalten? Eine neue Datei wird immer angehängt und die Reihenfolge immer gleich!?
Jede Datei in meinem Archiv ist 2932 Bytes groß.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.

Geändert von Willie1 (31. Jan 2021 um 18:20 Uhr)
  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 03:24 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 by Thomas Breitkreuz