"System.IO.Compression" ad alanında "ZipFile" sınıfını bulamadım


112

"System.IO.Compression" ad alanında "Zipfile" sınıfını kullanamıyorum benim kodum:

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);
        }
    }
}

hata şudur:

'Zipfile' adı mevcut bağlamda mevcut değil

Bunu nasıl çözebilirim?


Rick
Strahl'ın

Yanıtlar:


213

Bunun için fazladan bir referansa ihtiyacınız var; Bunu yapmanın en uygun yolu NuGet paketi System.IO.Compression.ZipFile yoluyla yapmaktır.

<!-- Version here correct at time of writing, but please check for latest -->
<PackageReference Include="System.IO.Compression.ZipFile" Version="4.3.0" />

NuGet olmadan .NET Framework üzerinde çalışıyorsanız, "System.IO.Compression.FileSystem.dll" derlemesine bir dll başvurusu eklemeniz ve en az .NET 4.5 kullandığınızdan emin olmanız gerekir (çünkü önceki çerçevelerde mevcuttur).

Bilgi için, derlemeyi ve .NET sürümlerini MSDN'de bulabilirsiniz.


2
.NET 4.0 kullanıyorum ... ve bu dll dosyasını bulamadım
Mohamed Kamal

17
@MohamedKamal gerçekten, o zamana kadar mevcut olmadığı için .NET 4.5 kullanmadığınız sürece yapmayacaksınız; "Sürüm Bilgileri" bilgisine bakın - "Destekleyen: 4.5"
Marc Gravell

1
@MarcGravell Ben de aynı hatayı yaşıyorum. Visual Studio -> yardım -> Microsoft Visual Studio hakkında kontrol ettim, .NET sürüm 4.5.51650 ile görünüyor. Bundan sonra neyi kontrol etmeliyim?
foxwendy

4
FileSystemReferansa sahip değildim . Sadece System.IO.Compression. Teşekkürler. Tuhaf, sınıfın ad alanında olmayan bir dosya gerektirmesidir. Konvansiyondan garip bir sapma.
Chris Benard

3
@ChrisBenard Aynı sorunu buldum. System.IO.Compression'a referans eklemek yeterli değildi, FileSystem'e de ihtiyacım vardı. Gerçekten ilginç.
dckuehn

32

.NET'te yeşil programcılar olanlar için, DLL başvurusunu MarcGravell'in belirttiği gibi eklemek için şu adımları izleyin:

Visual C # 'da bir referans eklemek için

  1. Solution Explorer'da proje düğümüne sağ tıklayın ve Add Reference'a tıklayın.
  2. Referans Ekle iletişim kutusunda, referans vermek istediğiniz bileşen tipini gösteren sekmeyi seçin.
  3. Referans vermek istediğiniz bileşenleri seçin ve ardından Tamam'a tıklayın.

MSDN Makalesinden, Nasıl Yapılır: Referans Ekle İletişim Kutusunu Kullanarak Referans Ekleme veya Kaldırma .


1
Bilgi için teşekkürler. System.IO.Compression kullanmıştım; ancak daha sonra ZipFile'ı OP'nin orijinal hatası olmadan derlemek için yukarıda açıkladığınız gibi System.IO.Compression.FileSystem kullanmaya bir referans eklemek zorunda kaldı.
Hugh Seagraves

17

4.5'e yükseltemiyorsanız harici bir paket kullanabilirsiniz. Bunlardan biri, DotNetZipLib'den Ionic.Zip.dll'dir.

using Ionic.Zip;

buradan indirebilirsiniz, ücretsizdir. http://dotnetzip.codeplex.com/


3
veya
NuGet

2
Bu soru ile nasıl alakalı?
eugenekgn

20
sorusu "bunu nasıl düzeltebilirim?" ve bu, düzeltmenin bir yoludur - çünkü onun .net sürümü desteklemiyordu.
John Faulkner

4
Ne yazık ki, yükseltme bazen bir seçenek değildir. Olumlu oy alın.
sampathsris

1
Bu, XP'nin kurulu olduğu 2000 bilgisayara yazıyorsanız ve programınız herhangi bir kurulum yapamıyorsa (.net 4.5 çerçevesini kurmak için)
Mukus

10

Referanslara gidin ve "System.IO.Compression.FileSystem" ekleyin.


"Referanslar" bulabileceğim sınırsız yerim var. Bunu nerede bulacağınıza dair daha fazla ipucu verebilir misiniz?
Daniel Kaplan

2

Bana yardımcı olan bir çözüm: Araçlar> NuGet Paket Yöneticisi> Çözüm için Paketlenmiş NuGet'i Yönet ...> Gözat> System.IO.Compression.ZipFile öğesini ara ve yükleyin


1

Bunun eski bir konu olduğunu biliyorum, ancak bununla ilgili bazı yararlı bilgiler yayınlamaktan vazgeçemiyorum. Zip sorusunun sık sık gündeme geldiğini görüyorum ve bu, sık sorulan soruların neredeyse çoğunu yanıtlıyor.

4.5 + kullanmanın çerçeve sorunlarını aşmak için ... Bunlar jaime-olivares tarafından oluşturulan bir ZipStorer sınıfıdır: https://github.com/jaime-olivares/zipstorer , ayrıca bu sınıfın nasıl kullanılacağına dair bir örnek de ekledi. ve ayrıca belirli bir dosya adının nasıl aranacağına dair bir örnek de ekledi.

Ve bunun nasıl kullanılacağına ve belirli bir dosya uzantısı için yinelemeye ilişkin referans olarak, bunu yapabilirsiniz:

#region
/// <summary>
/// Custom Method - Check if 'string' has '.png' or '.PNG' extension.
/// </summary>
static bool HasPNGExtension(string filename)
{
    return Path.GetExtension(filename).Equals(".png", StringComparison.InvariantCultureIgnoreCase)
        || Path.GetExtension(filename).Equals(".PNG", StringComparison.InvariantCultureIgnoreCase);
}
#endregion

private void button1_Click(object sender, EventArgs e)
{
    //NOTE: I recommend you add path checking first here, added the below as example ONLY.
    string ZIPfileLocationHere = @"C:\Users\Name\Desktop\test.zip";
    string EXTRACTIONLocationHere = @"C:\Users\Name\Desktop";

    //Opens existing zip file.
    ZipStorer zip = ZipStorer.Open(ZIPfileLocationHere, FileAccess.Read);

    //Read all directory contents.
    List<ZipStorer.ZipFileEntry> dir = zip.ReadCentralDir();

    foreach (ZipStorer.ZipFileEntry entry in dir)
    {
        try
        {
            //If the files in the zip are "*.png or *.PNG" extract them.
            string path = Path.Combine(EXTRACTIONLocationHere, (entry.FilenameInZip));
            if (HasPNGExtension(path))
            {
                //Extract the file.
                zip.ExtractFile(entry, path);
            }
        }
        catch (InvalidDataException)
        {
            MessageBox.Show("Error: The ZIP file is invalid or corrupted");
            continue;
        }
        catch
        {
            MessageBox.Show("Error: An unknown error ocurred while processing the ZIP file.");
            continue;
        }
    }
    zip.Close();
}


1

System.IO.Compression.ZipFile'ı çalışmakta olduğu nuget referansı olarak ekleyin


0

Çözüm gezgininde Referanslar'a sağ tıklayın, ardından montajları genişletmek için tıklayın, System.IO.Compression.FileSystem öğesini bulun ve işaretlendiğinden emin olun. O zaman bunu sınıfınızda kullanabilirsiniz -using System.IO.Compression;

Referans Birleştirme Ekran Görüntüsü Ekle


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.