Tôi không tìm thấy lớp "ZipFile" trong không gian tên "System.IO.Compression"


111

Tôi không thể sử dụng lớp "Zipfile" trong không gian tên "System.IO.Compression" mã của tôi là:

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

lỗi là:

Tên 'zipfile' không tồn tại trong ngữ cảnh hiện tại

Làm thế nào tôi có thể giải quyết nó?


Câu trả lời:


212

Bạn cần thêm một tài liệu tham khảo cho điều này; cách thuận tiện nhất để làm điều này là thông qua gói 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" />

Nếu bạn đang làm việc trên .NET Framework mà không có NuGet, bạn cần thêm tham chiếu dll vào assembly, "System.IO.Compression.FileSystem.dll" - và đảm bảo bạn đang sử dụng ít nhất .NET 4.5 (vì nó không tồn tại trong các khuôn khổ trước đó).

Để biết thông tin, bạn có thể tìm (các) phiên bản lắp ráp và .NET từ MSDN


2
Tôi đang sử dụng .NET 4.0 ... và tôi không tìm thấy file dll này
Mohamed Kamal

17
@MohamedKamal thực sự, bạn sẽ không làm như vậy trừ khi bạn sử dụng .NET 4.5, vì nó chưa tồn tại cho đến lúc đó; xem thông tin "Thông tin phiên bản" - "Được hỗ trợ trong: 4.5"
Marc Gravell

1
@MarcGravell Tôi đang gặp lỗi tương tự. Tôi đã kiểm tra Visual Studio -> help -> About Microsoft Visual Studio, nó hiển thị với .NET phiên bản 4.5.51650. Tôi nên kiểm tra những gì tiếp theo?
foxwendy

4
Tôi không có FileSystemtài liệu tham khảo. Duy nhất System.IO.Compression. Cảm ơn. Kỳ lạ là nó yêu cầu một tệp không có trong không gian tên của lớp. Đó là một sự sai lệch kỳ lạ so với quy ước.
Chris Benard

3
@ChrisBenard Tôi đã tìm thấy vấn đề tương tự. Bao gồm một tham chiếu đến System.IO.Compression là không đủ, tôi cũng cần FileSystem. Thực sự thú vị.
dckuehn

32

Đối với những người là lập trình viên xanh trong .NET, để thêm tham chiếu DLL như MarcGravell đã lưu ý, bạn làm theo các bước sau:

Để thêm một tham chiếu trong Visual C #

  1. Trong Solution Explorer, bấm chuột phải vào nút dự án và bấm Thêm tham chiếu.
  2. Trong hộp thoại Thêm tham chiếu, chọn tab cho biết loại thành phần bạn muốn tham chiếu.
  3. Chọn các thành phần bạn muốn tham chiếu, sau đó bấm OK.

Từ Bài viết MSDN, Cách: Thêm hoặc Loại bỏ Tham chiếu Bằng cách Sử dụng Hộp thoại Thêm Tham chiếu .


1
Cảm ơn bạn về thông tin. Tôi đã sử dụng System.IO.Compression; nhưng sau đó phải thêm một tham chiếu để sử dụng System.IO.Compression.FileSystem như bạn đã mô tả ở trên để có được ZipFile để biên dịch mà không bị lỗi ban đầu của OP.
Hugh Seagraves

17

bạn có thể sử dụng gói bên ngoài nếu bạn không thể nâng cấp lên 4.5. Một trong số đó là Ionic.Zip.dll từ DotNetZipLib.

using Ionic.Zip;

bạn có thể tải xuống tại đây, miễn phí. http://dotnetzip.codeplex.com/


3
hoặc cài đặt nó thông qua NuGet
northben

2
Điều này liên quan đến câu hỏi như thế nào?
eugenekgn

20
câu hỏi của anh ấy là "làm thế nào để sửa chữa nó?" và đây là một cách để khắc phục - vì phiên bản .net của anh ấy không hỗ trợ nó.
John Faulkner

4
Đáng buồn thay, nâng cấp không phải là một sự lựa chọn đôi khi. Có một ủng hộ.
sampathsris

1
Đây là liên quan nếu bạn đang viết đến 2000 máy tính đã được cài đặt XP và chương trình của bạn không thể làm bất kỳ cài đặt (cài đặt .NET Framework 4.5)
Mukus

10

Chỉ cần đi tới Tài liệu tham khảo và thêm "System.IO.Compression.FileSystem".


Tôi có vô số nơi để tìm "Tài liệu tham khảo". Bạn có thể cung cấp thêm gợi ý về nơi để tìm cái này?
Daniel Kaplan

2

Một giải pháp đã giúp tôi: Đi tới Công cụ> Trình quản lý gói NuGet> Quản lý NuGet Gói cho Giải pháp ...> Duyệt> Tìm kiếm System.IO.Compression.ZipFile và cài đặt nó


1

Tôi biết đây là một chủ đề cũ, nhưng tôi không thể tránh khỏi việc đăng một số thông tin hữu ích về điều này. Tôi thấy câu hỏi Zip xuất hiện rất nhiều và câu này trả lời gần như hầu hết các câu hỏi phổ biến.

Để giải quyết các vấn đề về khuôn khổ khi sử dụng 4.5 + ... Chúng là một lớp ZipStorer được tạo bởi jaime-olivares: https://github.com/jaime-olivares/zipstorer , anh ấy cũng đã thêm một ví dụ về cách sử dụng lớp này như tốt và cũng đã thêm một ví dụ về cách tìm kiếm một tên tệp cụ thể.

Và để tham khảo về cách sử dụng nó và lặp lại cho một phần mở rộng tệp nhất định, chẳng hạn như bạn có thể làm như sau:

#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

Thêm System.IO.Compression.ZipFile làm tham chiếu nuget nó đang hoạt động


0

Trong trình khám phá giải pháp, bấm chuột phải vào Tham chiếu, sau đó bấm để mở rộng hội đồng, tìm System.IO.Compression.FileSystem và đảm bảo rằng nó đã được chọn. Sau đó, bạn có thể sử dụng nó trong lớp của mình -using System.IO.Compression;

Thêm ảnh chụp màn hình hội đồng tham khảo


0

Vấn đề ở đây là bạn vừa Thêm tham chiếu vào System.IO.Compression, nó thiếu tham chiếu đến System.IO.Compression.Filesystem.dll

Và bạn cần thực hiện trên .net 4.5 trở lên (vì nó không tồn tại trên các phiên bản cũ hơn).

Tôi vừa đăng một tập lệnh trên TechNet Có lẽ ai đó sẽ thấy nó hữu ích vì nó yêu cầu .net 4.5 hoặc 4.7

https://gallery.technet.microsoft.com/scriptcenter/Create-a-Zip-file-from-a-b23a7530

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.