Saya tidak menemukan kelas "ZipFile" di namespace "System.IO.Compression"


112

Saya tidak dapat menggunakan kelas "Zipfile" di ruang nama "System.IO.Compression", kode saya adalah:

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

kesalahannya adalah:

Nama 'zipfile' tidak ada dalam konteks saat ini

Bagaimana saya bisa mengatasinya?


Jawaban:


213

Anda membutuhkan referensi tambahan untuk ini; cara paling mudah untuk melakukannya adalah melalui paket NuGet System.IO.Compression.ZipFile

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

Jika Anda bekerja pada .NET Framework tanpa NuGet, Anda perlu menambahkan referensi dll ke rakitan, "System.IO.Compression.FileSystem.dll" - dan pastikan Anda menggunakan setidaknya .NET 4.5 (karena tidak ada di kerangka sebelumnya).

Untuk info, Anda dapat menemukan rakitan dan versi .NET dari MSDN


2
Saya menggunakan .NET 4.0 ... dan saya tidak menemukan file dll ini
Mohamed Kamal

17
@MohamedKamal memang, Anda tidak akan melakukannya kecuali Anda menggunakan .NET 4.5, karena belum ada sampai saat itu; lihat info "Informasi Versi" - "Didukung di: 4.5"
Marc Gravell

1
@MarcGravell Saya mengalami kesalahan yang sama. Saya memeriksa Visual Studio -> bantuan -> Tentang Microsoft Visual Studio, itu terlihat dengan .NET versi 4.5.51650. Apa yang harus saya periksa selanjutnya?
foxwendy

4
Saya tidak punya FileSystemreferensi. Hanya System.IO.Compression. Terima kasih. Aneh bahwa itu membutuhkan file yang tidak ada di namespace kelas. Ini adalah penyimpangan yang aneh dari konvensi.
Chris Benard

3
@ChrisBen Saya menemukan masalah yang sama. Termasuk referensi ke System.IO.Compression tidak cukup, saya membutuhkan FileSystem juga. Memang menarik.
dckuehn

32

Bagi mereka yang merupakan programmer hijau di .NET, untuk menambahkan referensi DLL seperti yang dicatat oleh MarcGravell , Anda mengikuti langkah-langkah berikut:

Untuk menambahkan referensi dalam Visual C #

  1. Di Solution Explorer, klik kanan node proyek dan klik Add Reference.
  2. Dalam kotak dialog Tambahkan Referensi, pilih tab yang menunjukkan tipe komponen yang ingin Anda rujuk.
  3. Pilih komponen yang ingin Anda rujuk, lalu klik OK.

Dari Artikel MSDN, Cara: Menambah atau Menghapus Referensi Dengan Menggunakan Kotak Dialog Tambah Referensi .


1
Terimakasih atas infonya. Saya sudah menggunakan System.IO.Compression; tetapi kemudian harus menambahkan referensi untuk menggunakan System.IO.Compression.FileSystem seperti yang Anda jelaskan di atas untuk mendapatkan ZipFile untuk dikompilasi tanpa kesalahan asli OP.
Hugh Seagraves

17

Anda dapat menggunakan paket eksternal jika Anda tidak dapat meningkatkan ke 4.5. Salah satunya adalah Ionic.Zip.dll dari DotNetZipLib.

using Ionic.Zip;

Anda dapat mengunduhnya di sini, gratis. http://dotnetzip.codeplex.com/


3
atau pasang melalui NuGet
northben

2
Bagaimana ini relevan dengan pertanyaan?
eugenekgn

20
pertanyaannya adalah "bagaimana cara memperbaikinya?" dan ini adalah salah satu cara untuk memperbaikinya - karena versinya .net tidak mendukungnya.
John Faulkner

4
Sayangnya, terkadang upgrade bukanlah pilihan. Dapatkan suara positif.
sampathsris

1
Ini relevan jika Anda menulis ke 2000 PC yang telah menginstal XP dan program Anda tidak dapat melakukan instalasi apa pun (untuk menginstal .net 4.5 framework)
Mukus

10

Cukup buka Referensi dan tambahkan "System.IO.Compression.FileSystem".


Saya memiliki tempat tanpa batas untuk menemukan "Referensi". Dapatkah Anda memberikan lebih banyak petunjuk tentang di mana menemukan ini?
Daniel Kaplan

2

Solusi yang membantu saya: Buka Alat> NuGet Package Manager> Kelola Paket NuGet untuk Solusi ...> Jelajahi> Cari System.IO.Compression.ZipFile dan instal


1

Saya tahu ini adalah utas lama, tetapi saya tidak bisa menghindari memposting beberapa info berguna tentang ini. Saya melihat pertanyaan Zip sering muncul dan ini menjawab hampir semua pertanyaan umum.

Untuk mengatasi masalah kerangka kerja menggunakan 4.5 + ... Mereka adalah kelas ZipStorer yang dibuat oleh jaime-olivares: https://github.com/jaime-olivares/zipstorer , dia juga telah menambahkan contoh bagaimana menggunakan kelas ini sebagai baik dan juga menambahkan contoh bagaimana mencari nama file tertentu juga.

Dan untuk referensi tentang cara menggunakan ini dan melakukan iterasi untuk ekstensi file tertentu sebagai contoh, Anda dapat melakukan ini:

#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

Tambahkan System.IO.Compression.ZipFile sebagai referensi nuget yang berfungsi


0

Di explorer solusi, klik kanan Referensi, lalu klik untuk memperluas rakitan, temukan System.IO.Compression.FileSystem dan pastikan sudah dicentang. Kemudian Anda dapat menggunakannya di kelas Anda -using System.IO.Compression;

Tambahkan Screenshot Majelis Referensi


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.