मुझे "System.IO.Compression" नामस्थान में "ZipFile" वर्ग नहीं मिला


111

मैं "Space.IO.Compression" नाम स्थान में "ज़िपफाइल" वर्ग का उपयोग नहीं कर सकता हूं, मेरा कोड है:

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

त्रुटि यह है:

वर्तमान संदर्भ में 'zipfile' नाम मौजूद नहीं है

मैं इसे कैसे हल कर सकता हूं?


जवाबों:


212

आपको इसके लिए एक अतिरिक्त संदर्भ की आवश्यकता है; ऐसा करने का सबसे सुविधाजनक तरीका 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" />

यदि आप NuGet के बिना .NET फ्रेमवर्क पर काम कर रहे हैं, तो आपको असेंबली में एक dll संदर्भ जोड़ना होगा, "System.IO.Compression.FileSystem.dll" - और सुनिश्चित करें कि आप कम से कम .NET 4.5 का उपयोग कर रहे हैं (क्योंकि यह नहीं करता है पहले के ढांचे में मौजूद हैं)।

जानकारी के लिए, आप MSDN से असेंबली और .NET वर्जन पा सकते हैं


2
मैं .NET 4.0 का उपयोग कर रहा हूं ... और मुझे यह dll फ़ाइल नहीं मिली
मोहम्मद कमाल

17
@MohamedKamal वास्तव में, जब तक आप .NET 4.5 का उपयोग नहीं करते, तब तक आप ऐसा नहीं करेंगे, क्योंकि यह तब तक मौजूद नहीं था; "संस्करण सूचना" जानकारी देखें - "समर्थित: 4.5"
मार्क ग्रेवेल

1
@MarcGravell मुझे वही त्रुटि हो रही है। मैंने Visual Studio -> help -> Microsoft Visual Studio के बारे में जाँच की, यह .NET संस्करण 4.5.51650 के साथ दिखाता है। मुझे आगे क्या जांच करनी चाहिए?
foxwendy

4
मेरे पास FileSystemसंदर्भ नहीं था । केवल System.IO.Compression। धन्यवाद। अजीब बात है कि इसके लिए एक ऐसी फ़ाइल की आवश्यकता होती है जो कक्षा के नामस्थान में न हो। यह सम्मेलन से एक अजीब विचलन है।
क्रिस बेनार्ड

3
@ChrisBenard मुझे वही मुद्दा मिला। System.IO.Compression के लिए एक संदर्भ शामिल करना पर्याप्त नहीं था, मुझे फाइलसिस्टम की भी आवश्यकता थी। दिलचस्प है।
dckuehn

32

उन लोगों के लिए जो .NET में हरे रंग के प्रोग्रामर हैं, डीएलएल संदर्भ को मार्कग्रेवल के रूप में जोड़ने के लिए , आप इन चरणों का पालन करते हैं:

Visual C # में एक संदर्भ जोड़ने के लिए

  1. समाधान एक्सप्लोरर में, प्रोजेक्ट नोड पर राइट-क्लिक करें और संदर्भ जोड़ें पर क्लिक करें।
  2. संदर्भ जोड़ें संवाद बॉक्स में, उस टैब का चयन करें, जिसे आप संदर्भ देना चाहते हैं।
  3. उन घटकों का चयन करें जिन्हें आप संदर्भ देना चाहते हैं, और फिर ठीक पर क्लिक करें।

MSDN अनुच्छेद से, कैसे करें: संदर्भ जोड़ें संवाद बॉक्स का उपयोग करके संदर्भ जोड़ें या निकालें


1
जानकारी के लिए धन्यवाद। मैंने पहले से ही System.IO.Compression का उपयोग किया था; लेकिन तब आपको System.IO.Com.Compression.FileSystem का उपयोग करने के लिए एक संदर्भ जोड़ना था जैसा कि आपने ऊपर बताया है कि ओपी की मूल त्रुटि के बिना संकलन करने के लिए जिपफाइल प्राप्त करें।
ह्यूग सीग्रेव्स

17

यदि आप 4.5 में अपग्रेड नहीं कर सकते हैं तो आप एक बाहरी पैकेज का उपयोग कर सकते हैं। ऐसा ही एक DonicNetZipLib से Ionic.Zip.dll है।

using Ionic.Zip;

आप इसे यहाँ डाउनलोड कर सकते हैं, यह मुफ़्त है। http://dotnetzip.codeplex.com/


3
या NuGet के माध्यम से इसे स्थापित करें
उत्तरबेन

2
यह सवाल कैसे प्रासंगिक है?
यूजीनकेगन

20
उनका सवाल था "मैं इसे कैसे ठीक करूं?" और यह इसे ठीक करने का एक तरीका है - क्योंकि उसके .net संस्करण ने उसका समर्थन नहीं किया।
जॉन फॉल्कनर

4
अफसोस की बात है, उन्नयन कभी-कभी एक विकल्प नहीं होता है। एक उत्थान है।
संपतश्री

1
यह प्रासंगिक है यदि आप 2000 पीसी पर लिख रहे हैं जिसमें XP स्थापित है और आपका प्रोग्राम कोई भी इंस्टॉलेशन (.net 4.5 फ्रेमवर्क स्थापित करने के लिए) नहीं कर सकता है
Mukus

10

बस सन्दर्भ पर जाएँ और "System.IO.Compression.FileSystem" जोड़ें।


मेरे पास "संदर्भ" खोजने के लिए असीम स्थान हैं। क्या आप इस बारे में अधिक संकेत दे सकते हैं कि इसे कहां खोजा जाए?
डैनियल कपलान

2

एक समाधान जिसने मेरी मदद की: टूल पर जाएं> NuGet Package Manager> समाधान के लिए पैक किए गए NuGet प्रबंधित करें ...> ब्राउज़ करें> System.IO.Compression.ZipFile के लिए खोजें और इसे स्थापित करें


1

मुझे पता है कि यह एक पुराना धागा है, लेकिन मैं अभी इस पर कुछ उपयोगी जानकारी पोस्ट करने से दूर नहीं जा सकता। मैं देख रहा हूं कि जिप प्रश्न बहुत सामने आया है और यह उत्तर अधिकतर सामान्य प्रश्नों का है।

4.5 + का उपयोग करने के ढांचे के मुद्दों के बारे में जानने के लिए ... वे jaime-olivares द्वारा बनाई गई एक ZipStorer वर्ग है: https://github.com/jaime-olivares/zipstorer , उन्होंने इस वर्ग का उपयोग करने के तरीके का एक उदाहरण भी जोड़ा है अच्छी तरह से और एक उदाहरण भी जोड़ा है कि कैसे एक विशिष्ट फ़ाइल नाम के लिए खोज करने के लिए।

और इस का उपयोग करने के संदर्भ के लिए और एक निश्चित फ़ाइल एक्सटेंशन के माध्यम से पुनरावृति करें उदाहरण के लिए आप ऐसा कर सकते हैं:

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



0

समाधान एक्सप्लोरर में, राइट-क्लिक करें संदर्भ, फिर असेंबली का विस्तार करने के लिए क्लिक करें, System.IO.Compression.FileSystem ढूंढें और सुनिश्चित करें कि यह जांच की गई है। फिर आप इसे अपनी कक्षा में उपयोग कर सकते हैं -using System.IO.Compression;

संदर्भ विधानसभा स्क्रीनशॉट जोड़ें


0

यहाँ मुद्दा यह है कि आपने अभी System.IO.Compression का संदर्भ जोड़ा है, यह System.IO.Compression.Filesystem.dll के संदर्भ को याद कर रहा है

और आपको इसे .net 4.5 या बाद में करने की आवश्यकता है (क्योंकि यह पुराने संस्करणों पर मौजूद नहीं है)।

मैंने अभी TechNet पर एक स्क्रिप्ट पोस्ट की है। हो सकता है कि कोई इसे उपयोगी समझे। इसे 4.5 या 4.7 की आवश्यकता होती है

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.