2010-08-09 10 views
15

Mam poprawkę. Muszę pobrać plik zip z lokalizacji sieciowej, a następnie rozpakować go na lokalnym komputerze i użyć plików. Jedynym ograniczeniem jest to, że nie mogę używać żadnej biblioteki DLL innej firmy.Jak rozpakować plik zip przy użyciu środowiska dotnet w wersji 4.0 bez korzystania z bibliotek innych firm

+0

Wygląda to na duplikat tego pytania: http://stackoverflow.com/questions/836736/unzip-files-programmatically-in-net. Możesz tam sprawdzić więcej odpowiedzi. – Rich

+2

Dlaczego nie możesz korzystać z biblioteki stron trzecich? To głupi wymóg ... prawdopodobnie stworzony przez kogoś w zarządzaniu;) –

+0

Jest to bardzo ważny wymóg, ponieważ brak obsługi .NET Framework dla suwaków zwiększa złożoność dodawania kolejnej biblioteki DLL (a kwestia bezpieczeństwa jest prawdziwa, ponieważ jeśli spójrz na zasadę należytej staranności Microsoftu z ich kodem, jest znacznie lepsza niż większość) –

Odpowiedz

10

W środowisku .NET Framework 4.5 istnieje teraz metoda System.IO.Compression.ZipFile.ExtractToDirectory(String, String).

+0

System.IO.Compression;) – tanathos

+0

OOps, szybkie pisanie ... Poprawię to :) –

+19

Podoba mi się, jak pytanie o rozwiązanie 4.0 i odpowiedź 4.5 zostało wybrane – DontFretBrett

0

Szybkie wyszukiwanie google to zmieniło. GZipStream Class MSDN Reference

+5

"... jednak ta klasa nie zapewnia z natury funkcjonalności dodawania plików do ekstraktów .zip ani ich wyodrębniania ..." –

3

Nie ma "dobrego" sposobu na zrobienie tego. Oczywiście można zaimplementować algorytm ZIP samodzielnie, korzystając z publicznie dostępnego information ze struktury plików ZIP i klas, takich jak DeflateStream (chociaż nawet to może nie działać, jeśli nie jest skompresowane przy użyciu algorytmu DEFLATE). Jest trochę informacji o możliwych alternatywach w this blog post, ale krótka wersja jest taka, że ​​będziesz musiał albo użyć biblioteki innej firmy, albo ponownie ją zapisać.

Jeśli jest to sytuacja, w której można by wydać kod źródłowy w sposób GPL, można skopiować i wkleić kod z projektu takiego jak SharpZipLib do własnego, tym samym unikając wymogu korzystania z biblioteki DLL . Poza tym, dlaczego nie możesz korzystać z bibliotek DLL innych firm?

0

GZipStream jest najczęściej używany do kompresji danych WCF. Nie używaj tego tutaj.

Można spróbować tej biblioteki ZIP do kompresji do plików:

http://www.icsharpcode.net/opensource/sharpziplib/

+2

To się nie pojawia być pytaniem WCF, a GZipStream nie pomoże w plikach ZIP, które zwykle używają algorytmu DEFLATE. –

+0

Nie zrozumiałeś mojego wpisu. Zasugerowałem inne podejście ... – Turowicz

+0

SharpZipLib zawiedzie z plikami skompresowanymi przez system hosta unix.Na przykład, gdy wykonano na komputerze MacOSX, używając wewnętrznego kompresora zip – Highmastdon

4

Nie jestem pewien, czy to jest nadal dostępny w VS2010, ale we wcześniejszych wersjach J # został uwzględniony w VS i J # zawiera java.util.zip klasy w vjslib.dll, a ponieważ jest częścią VS, nie jest to trzecia strona DLL, więc możesz to zrobić w ten sposób.

Oto artykuł CodeProject pokazujący jak to zrobić: Zip and Unzip from a C# program using J# runtime

+0

Interesujące, nie wiedziałem, że tam był ... –

+0

Należy pamiętać, że J # nie jest już dostarczany z .NET Framework, chociaż nadal jest dostarczany z VS2005- 2015. Może to nadal być prawidłowe rozwiązanie dla niektórych osób. https://social.msdn.microsoft.com/Forums/office/en-US/627b5ca3-fac7-461f-9e3a-824fd2a5eb32/problem-with-vjslibdll?forum=netfxbcl – ErikusMaximus

2

Sam framework .NET nie obsługuje (obecnie) ma oficjalnego wsparcia dla plików ZIP. Dostępnych jest kilka wysokiej jakości niezależnych bibliotek niezależnych, a J # runtime obsługuje je, jak zauważyły ​​inne.

Polecam rozwiązanie innej firmy, ale jeśli absolutnie nie możesz tego zrobić, jest jeszcze jedna sztuczka: ZipPackage, która jest częścią WPF. Sortuje pliki ZIP (wzbogacone o dodatkowe metadane) i działa na tyle dobrze, aby odczytywać większość plików ZIP.

Powiązane problemy