Nie mogę użyć klasy „Zipfile” w przestrzeni nazw „System.IO.Compression”. Mój kod to:
using System;
using System.IO;
using System.IO.Compression;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
string startPath = @"c:\example\start";
string zipPath = @"c:\example\result.zip";
string extractPath = @"c:\example\extract";
ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Fastest,true);
ZipFile.ExtractToDirectory(zipPath, extractPath);
}
}
}
błąd to:
Nazwa „zipfile” nie istnieje w obecnym kontekście
Jak mogę to rozwiązać?
Odpowiedzi:
Potrzebujesz do tego dodatkowego odniesienia; Najwygodniej jest to zrobić za pomocą pakietu NuGet System.IO.Compression.ZipFile
Jeśli pracujesz w .NET Framework bez NuGet, musisz dodać odwołanie dll do zestawu „System.IO.Compression.FileSystem.dll” - i upewnić się, że używasz co najmniej .NET 4.5 (ponieważ nie istnieją we wcześniejszych frameworkach).
Aby uzyskać informacje, można znaleźć wersję zestawu i .NET w witrynie MSDN
źródło
FileSystem
odniesienia. TylkoSystem.IO.Compression
. Dzięki. Dziwne, że wymaga pliku, którego nie ma w przestrzeni nazw klasy. To dziwne odstępstwo od konwencji.Dla tych, którzy są ekologicznymi programistami w .NET, dodaj referencję DLL jako MarcGravell zauważył , wykonaj następujące kroki:
Aby dodać odwołanie w Visual C #
Z artykułu MSDN, jak: Dodawanie lub usuwanie odwołań za pomocą okna dialogowego Dodaj odwołanie .
źródło
możesz użyć zewnętrznego pakietu, jeśli nie możesz zaktualizować do wersji 4.5. Jednym z nich jest Ionic.Zip.dll z DotNetZipLib.
możesz go pobrać tutaj, jest bezpłatny. http://dotnetzip.codeplex.com/
źródło
Po prostu przejdź do References i dodaj „System.IO.Compression.FileSystem”.
źródło
Rozwiązanie, które mi pomogło: przejdź do pozycji Narzędzia> Menedżer pakietów NuGet> Zarządzaj pakietem NuGet w poszukiwaniu rozwiązania ...> Przeglądaj> Wyszukaj System.IO.Compression.ZipFile i zainstaluj go
źródło
Wiem, że to stary wątek, ale po prostu nie mogę odejść od publikowania przydatnych informacji na ten temat. Widzę, że często pojawia się pytanie Zip, które odpowiada prawie na większość typowych pytań.
Aby obejść problemy z ramami związane z używaniem 4.5 + ... Ich jest klasą ZipStorer stworzoną przez jaime-olivares: https://github.com/jaime-olivares/zipstorer , dodał również przykład, jak używać tej klasy jako dobrze, a także dodał przykład wyszukiwania określonej nazwy pliku.
Aby uzyskać informacje na temat tego, jak tego używać i iterować dla określonego rozszerzenia pliku, możesz to zrobić:
źródło
System.IO.Compression
jest teraz dostępny jako pakiet NuGet obsługiwany przez firmę Microsoft.Aby użyć
ZipFile
, musisz pobraćSystem.IO.Compression.ZipFile
pakiet NuGet .źródło
Dodaj System.IO.Compression.ZipFile jako odniesienie NuGet, które działa
źródło
W eksploratorze rozwiązań kliknij prawym przyciskiem myszy References, a następnie kliknij, aby rozwinąć zestawy, znajdź System.IO.Compression.FileSystem i upewnij się, że jest zaznaczony. Następnie możesz użyć go w swojej klasie -
using System.IO.Compression;
Zrzut ekranu dodawania zestawu odniesienia
źródło
Problem polega na tym, że właśnie dodano odwołanie do System.IO.Compression, brakuje odniesienia do System.IO.Compression.Filesystem.dll
I musisz to zrobić na .net 4.5 lub nowszym (ponieważ nie istnieje w starszych wersjach).
Właśnie opublikowałem skrypt na TechNet. Może ktoś uzna go za przydatny, wymaga .net 4.5 lub 4.7
https://gallery.technet.microsoft.com/scriptcenter/Create-a-Zip-file-from-a-b23a7530
źródło