Frage

Grüße....

Ich schreibe ein Backup -Programm in C# 3.5 mit HTE LESTER DOTNETZIP. Die Grundlagen des Programms sollen einen Speicherort auf einem Server und die maximale Größe einer überspannten Zip -Datei und GO erhalten. Von dort sollte es den gesamten Ordner/die Dateien vom angegebenen Speicherort aus dem Archiv hinzufügen und die genaue Struktur behalten. Es sollte auch alles auf einen angemessenen Betrag komprimieren. Eine bestimmte unkomprimierte Sammlung von Ordnern/Dateien könnte problemlos 10-25 GB betragen, wobei die erstellten Spanndateien auf jeweils etwa 1 GB beschränkt sind.

Ich habe alles funktioniert (mit Dotnetzip). Meine einzige Herausforderung ist, dass tatsächlich wenig bis gar keine Kompession passiert. Ich habe mich für die Einfachheit des Codes für die Einfachheit des Codes entschieden und nur, wie gut es zu meinem Projekt zugeschnitten zu sein schien. Nachdem ich herumgelesen habe, rate ich diese Entscheidung.

  1. Sollte ich angesichts des folgenden Codes und der großen Anzahl von Dateien in einem Archiv jede Datei komprimieren, da sie zum Reißverschluss hinzugefügt wird? Oder sollte die adddirectory -Methode etwa die gleiche Komprimierung liefern?

  2. Ich habe jede Komprimierung von ionic.zlib.compressionLevel ausprobiert, und keiner scheint zu helfen. Sollte ich darüber nachdenken, einen externen Komprimierungsalgorithmus zu verwenden und ihn in meine Dotnetzip -Datei zu streamen?

using (ZipFile zip = new ZipFile())  
{  
  zip.AddDirectory(root.FullName);  

  if (zipPassword.Length > 0)  
    zip.Password = zipPassword;  

  float size = zipGbSize * 1024 * 1024 * 1024;  

  zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;  
  zip.AddProgress += new EventHandler<AddProgressEventArgs>(Zip_AddProgress);  
  zip.ZipError += new EventHandler<ZipErrorEventArgs>(Zip_ZipError);  
  zip.Comment = "This zip was created at " + System.DateTime.Now.ToString("G");  
  zip.MaxOutputSegmentSize = (int)size;   //in gig  
  zip.Name = archiveDir.FullName + @"\Task_" + taskId.ToString() + ".zip";  
  zip.Save();  
}  

Vielen Dank für jede Hilfe!

War es hilfreich?

Lösung

1. Geben Sie den folgenden Code und die große Anzahl von Dateien in einem Archiv an, sollte ich jede Datei komprimieren, da sie zum Reißverschluss hinzugefügt wird?

Die Art und Weise, wie Dotnzip funktioniert, besteht darin, jede Datei zu komprimieren, da sie dem Archiv hinzugefügt wird. Ihre App muss keine Komprimierung durchführen. Dotnzip macht dies für Sie.

Oder sollte die adddirectory -Methode etwa die gleiche Komprimierung liefern?

Einträge, die über die Methode addDDIRectory () zu einer ZIP -Datei hinzugefügt wurden, gehen denselben Codepfad durch, wenn das ZIP -Archiv geschrieben wird, wie die Einträge über Addfile () hinzugefügt werden. Die Dateidaten werden komprimiert, dann optional verschlüsselt und dann in die ZIP -Datei geschrieben.


Ein unerwünschter Tipp: Sie müssen nicht:

zip.AddProgress += new EventHandler<AddProgressEventArgs>(Zip_AddProgress);   

Sie können einfach:

zip.AddProgress += Zip_AddProgress;   

Wie bestimmen Sie, dass keine Komprimierung auftritt?

Wenn Sie neugierig auf die Komprimierung jedes Eintrags sind, können Sie einen SaveProgress -Event -Handler registrieren. Das SaveProgress -Ereignis wird zu verschiedenen Zeiten während des Schreibens eines Archivs abgefeuert, einschließlich beim Speichern von Beginn, wenn Dotnetzip die Daten für einen Eintrag in verschiedenen Abständen während des Schreibens eines Eintrags nach dem Schreiben der Daten für jeden Eintrag und in verschiedenen Abständen beginnt Nach Abschluss des Schreibens aller Daten. Diese Phasen und beschrieben in Die Zipprogresseventype -Aufzählung. Wenn der EventType saving_afterwriteEntry ist, können Sie das Komprimierungsverhältnis für diesen bestimmten Eintrag berechnen.

Um zu überprüfen, ob keine Komprimierung stattfindet, würde ich vorschlagen, dass Sie ein solches SaveProgress -Ereignis registrieren und dieses Komprimierungsverhältnis betrachten.

Wie oben beschrieben, können einige Dateitypen nicht komprimiert werden. JPG, MPG, MP3, ZIP -Dateien und andere sind nicht sehr komprimierbar.


Schließlich kann ein Backup leichter zu tun sein, wenn Sie nur das Dotnetzip-Befehlszeilen-Tool verwenden. Wenn Sie nur ein bestimmtes Verzeichnis sichern möchten, können Sie das Befehlszeilen -Tool (zipit.exe) verwenden und vermeiden, ein Programm zu schreiben. Wenn Sie die Option -V verwenden, druckt das Tool Fortschrittsberichte und zeigt die Komprimierung für jeden Eintrag über den oben beschriebenen Mechanismus an. Auch wenn Sie es vorziehen, Ihr eigenes Programm zu schreiben, können Sie in Betracht ziehen, zipit.exe zu verwenden, um zu überprüfen, ob die Komprimierung bei Verwendung von Dotnetzip ist oder nicht.

Andere Tipps

Ich bin mir nicht sicher, ob ich Ihre Frage unterschätzt habe, aber die maximale Größe für jede Zip -Datei Es ist 4 GB. Vielleicht müssen Sie eine neue erstellen ZipFile Jedes Mal, wenn Sie diese Grenze erreichen.

Entschuldigung, wenn Ihnen das nicht hilft.

Welche Art von Daten komprimieren Sie? Einige Arten von Daten komprimieren einfach nicht sehr gut, z. B. JPEGs oder ZIP -Dateien, die bereits komprimiert sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top