2008-12-17 24 views
26

Czy ktoś wie o dobrej bibliotece skompresowania open-source dla .NET?Open-source biblioteka zip dla .NET?

+0

Może zostały przeredagowane „muszę generować archiwów zip przy użyciu .NET. Ale Net brakuje wsparcia archiwum ZIP. Jak możemy rozwiązać ten problem?”. Ale ponieważ fx 4.5 to wygląda naprawione przez [System.IO.Compression.ZipArchive] (https://msdn.microsoft.com/en-us/library/system.io.compression.ziparchive (v = vs.110) .aspx). –

Odpowiedz

35

SharpZipLib

Odnośnie uwag i innych stanowisk o wewnętrznej realizacji gzip, nie samo! GZip nie tworzy nagłówka wymaganego do archiwizacji; jest użyteczny tylko do "zipowania" jednego pliku lub strumienia.

Prawidłowe archiwa zip zawierają nagłówek, który zawiera listę wszystkich skompresowanych plików i skąd pochodzą skompresowane dane, a zatem potrzebujesz czegoś, co tworzy nagłówek. Oznacza to SharpZipLib, jedną z wielu komercyjnych wersji lub używających czegoś zewnętrznego z powiązaniami .NET jak 7zip.

Na zasadzie "ktoś inny", ktoś chce powiedzieć: "Ale cały czas widzę w Linuksie pliki .gz!" - to tylko pojedyncze pliki i .tar.gz nie jest wyjątkiem - tar jest archiwum. .gz to skompresowane archiwum.

+0

Nie potrzebujesz tego .NET ma wbudowaną funkcjonalność: zobacz klasę gzipstream. – AnthonyLambert

+0

gzipstream nie jest niczym w pobliżu zip-funkcjonalności. –

+0

Wydaje mi się, że jesteś zbyt pochłonięty plikami ... gzip to ogólny format kompresji. – AnthonyLambert

9

Spróbuj sprawdzić 7-zip. To program open source i mój ulubiony program zip. bardzo kewl. wykorzystuje także wiele rdzeni.

Zestaw .NET SDK jest dostępny pod numerem here.

+0

Dude - 7 zip IS program zipujący. To także open source ... więc to znaczy, że jest .NET, prawda? ==> Kod źródłowy C# dla kompresji i dekompresji LZMA –

+2

+1, SDK jest również domeną publiczną, to brzmi dla mnie naprawdę dobrze. – Tuminoid

+1

Słowo ostrzeżenia: (bezpieczna) implementacja C# 7-zip jest bardzo, znacznie wolniejsza niż biblioteka niezarządzana, coś jak 10x (prywatne wrażenie, nie było testu porównawczego, ponieważ różnica była tak duża). –

9

**** Ale faceci NET Już wspiera open source zip .... ****

http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx

jest to zgodne z bibliotekami GZIP. Użyłem tego do skompresowania danych w języku C# i rozpakowania w sieci w aplikacji C++. Działa w porządku.

Tony

+0

Jak współczynnik kompresji jest porównywany z 7-Zip? –

+0

To samo, co gZIP. – AnthonyLambert

+0

Przestrzeń nazw system.io.compression nie została całkowicie otwarta, przydatne rzeczy znajdują się w przestrzeni nazw microsoft.internal. W system.io.compression jest to tylko część przydatna do tworzenia małych spakowanych plików, takich jak nowe pliki pakietu Office, a nie rzeczywiste pliki zip. –

10

DotNet Zip Library (Ionic.Zip.dll) jest bardzo łatwy w użyciu. Czuję, że jest łatwiejsze do wdrożenia niż SharpZip.

http://www.codeplex.com/DotNetZip

+0

Nie rozszerza niektórych plików wykonywanych przez SharpZipLib. –

+0

które pliki nie są rozwijane? – Cheeso

+0

@Sergey - Tak, więcej szczegółów na temat zastrzeżenia? – mlhDev

-1

można również zapoznać się z J # REDIST. Ponownie implementuje java.util.zip. Article

2

Poszukaj here, jeśli chcesz 7-zip z C#. To było pytanie na innym stanowisku w SO. To może ci pomóc.

25

Kilka komentarzy.

  1. Nie należy używać środowiska wykonawczego J #. J # zostało wycofane przez Microsoft. Przyszłe wsparcie jest wątpliwe. Poza tym całe środowisko uruchomieniowe J # jest wielkim orzechem do przełknięcia, gdy potrzebujesz tylko obsługi ZIP.
  2. GzipStream w System.IO.Compression, część biblioteki klas bazowej .NET od .NET 2.0, zapewnia interfejs strumienia dla kompresji IETF RFC-1952. Kompresja jest w porządku, chociaż współczynnik kompresji nie jest optymalny i znacznie rozszerzy dane, które zostały wcześniej skompresowane. To jest bug was reported to Microsoft, but it's apparently been closed. Istnieje również DeflateStream, który jest podobny, ale dla RFC 1951. Istnieje powszechne nieporozumienie, że GZipStream robi pliki zip. Nie prawda. Żadne z tych dwóch plików zip nie jest wykonywane.
  3. There's System.IO.Packaging.ZipPackage.Działa, ale jest zaprojektowany i przeznaczony głównie do pakowania plików MS Office 2007 (.docx, .xslx i .pptx). Jest nieporęczny dla plików zip i nie obsługuje wielu funkcji ZIP, takich jak szyfrowanie.
  4. Jeśli potrzebujesz elastycznego sposobu tworzenia i odczytywania plików zip w .NET, potrzebujesz obecnie biblioteki innej firmy.

DotNetZip to dobra opcja dla firm trzecich. Darmowy, otwarty, aktywnie utrzymywany, prosty w użyciu, mały, dobry zestaw funkcji. Jest wysyłany jako pojedynczy zestaw - jest to w pełni zarządzany kod. Działa na Compact Framework, jak również na zwykłym .NET Framework. Wstępnym wymaganiem jest .NET 2.0.

DotNetZip zawiera również bibliotekę ZLIB z klasami takimi jak {Zlib, GZip, Deflate} Stream. Są one porównywalne do tych wbudowanych w .NET, ale obejmują one możliwość ustawienia poziomów kompresji, a na wyższych poziomach kompresują o wiele bardziej efektywnie niż wbudowane klasy. Kompresja ZlibStream wykonuje RFC 1950.

DotNetZip robi ZIP64, hasła, szyfrowanie AES, strumienie, SFX i Unicode. Każdy, kto go używa, twierdzi, że jest o wiele prostszy w użyciu niż SharpZipLib. Jest dobry plik pomocy (.chm) i mnóstwo przykładów kodu.

DNZ CHM http://i27.tinypic.com/2nl8fwk.jpg

+0

Czy wiesz, czy DotNetZip może być częścią projektu open source? Słyszałem, że licencji publicznej Microsoft nie można używać razem z licencją GPL. – Zenya

+0

Po pierwsze, nie jestem rzecznikiem praw własności intelektualnej ani ekspertem od licencji oprogramowania i ich wzajemnej zgodności. Jestem jednak pewien, że mogę odpowiedzieć na twoje pierwsze pytanie twierdząco: DotNetZip może być użyty w projekcie open source. W twoim komentarzu znajduje się drugie, domyślne pytanie: czy biblioteka licencjonowana w ramach MS-PL może być używana razem z kodem lub biblioteką licencjonowaną na warunkach licencji GPL? To zupełnie inne pytanie i nie będę próbował na nie odpowiedzieć. Nie jestem pewien, ale z twojej strony może być pewne założenie, że "open source implikuje GPL". To nie jest prawidłowe założenie. – Cheeso

+0

Świetna biblioteka, dzięki! – nrodic