2011-07-12 7 views
9

Potrzebuję tworzyć spasowane (wielowoluminowe) pliki zip przy użyciu .Net, ale nie udało mi się znaleźć biblioteki, która umożliwiłaby mi to zrobić.. Biblioteka .NET dla plików z plikami woluminu z podziałem objętości?

Spanned Zip to skompresowany plik ZIP, podzielony na kilka plików, które zwykle mają rozszerzenia takie jak .z00, .z01 i tak dalej.

Biblioteka musiałaby być open-source lub bezpłatna, ponieważ zamierzam użyć jej do projektu open source.

(jest to duplikat do this pytanie, ale nie ma tam odpowiedzi, a ja nie zamierzam na ASP konkretnego tak)

+0

Lata później, ale tylko do wyjaśnienia kwestia ta jest o ułamek archiwa. Rozproszone archiwa zip są czymś zupełnie innym - pojedyncze archiwa ZIP dzielą się na wiele woluminów logicznych (zwykle zaprojektowanych na dyskietkach). Różnica polega na tym, że podzielone archiwum ZIP używa nazwy ".z00 - .z (n - 1)", podczas gdy w archiwum z łączem wszystkie pliki mają tę samą nazwę (z takim samym rozszerzeniem ".zip"). –

Odpowiedz

13

DotNetZip pozwala to zrobić. Z ich dokumentacji:

Biblioteka obsługuje haseł Zip, Unicode, ZIP64, strumień wejściowy i wyjściowy, szyfrowania AES, wielu poziomach kompresji, archiwów samorozpakowujących, trwała archiwów i wiele więcej.

+0

+! DotNetZip jest świetny. –

+1

dotNetZip ma maksymalną liczbę spanowanych plików = 99. Jeśli chcesz utworzyć pliki 15 MB (do wysłania na e-mail), a skompresowane pliki mają> 1.5 GB, masz pecha. – docesam

+1

To prawda, że ​​DotNetZip ma maksymalną liczbę plików (segmentów) równą 99 dla archiwów rozdzielonych, chociaż wydaje się, że jest to całkowicie arbitralne. Najwcześniejsza wersja, jaką mogę znaleźć (Wikipedia), która określa limit, to 6.3.0 (2006), która pasuje do 6.3.4 (2014) w ~ 4 miliardach limitów plików (http://goo.gl/vh4Sp5 - Rozdział 8.5. 1). Ponieważ jednak biblioteka jest open-source, możesz przynajmniej stworzyć niestandardową modyfikację. Przy minimalnym rozmiarze pliku 64K (zgodnie ze specyfikacją ZIP) można uzyskać około 256 TB w jednym podzielonym archiwum ZIP bez przekraczania limitu plików. –

20

DotNetZip przykład:

int segmentsCreated ; 
using (ZipFile zip = new ZipFile()) 
{ 
    zip.UseUnicode= true; // utf-8 
    zip.AddDirectory(@"MyDocuments\ProjectX"); 
    zip.Comment = "This zip was created at " + System.DateTime.Now.ToString("G") ; 
    zip.MaxOutputSegmentSize = 100*1024 ; // 100k segments 
    zip.Save("MyFiles.zip"); 

    segmentsCreated = zip.NumberOfSegmentsForMostRecentSave ; 
} 

jeśli segmentsCreated wraca jako 5, następnie masz następujące nie więcej niż 100kb wielkości plików, każdy.

  • MyFiles.zip
  • MyFiles.z01
  • MyFiles.z02
  • MyFiles.z03
  • MyFiles.z04
+1

+1 dla przykładowego kodu – Jalal

+0

ładny kod, ale nie rozumiem tej linii 'zip.MaxOutputSegmentSize = 100 * 1024' jak to jest 100 kb? Chyba chcesz powiedzieć 1024Byte oznacza 1KB i 1KB * 100 oznacza 100 KB ..... mam rację? – Mou

+0

@Mou: To prawda. –