खोज…


परिचय

ZipFile वर्ग System.IO.Compression नामस्थान में रहता है। इसका उपयोग जिप फाइलों से पढ़ने, और लिखने के लिए किया जा सकता है।

टिप्पणियों

  • आप FileStream की जगह MemoryStream का भी उपयोग कर सकते हैं।

  • अपवाद

अपवाद शर्त
ArgumentException स्ट्रीम को पहले ही बंद कर दिया गया है, या स्ट्रीम की क्षमताएं मोड से मेल नहीं खातीं (जैसे: केवल पढ़ने के लिए लिखने की कोशिश कर रही स्ट्रीम)
ArgumentNullException इनपुट स्ट्रीम शून्य है
ArgumentOutOfRangeException मोड में एक अमान्य मान है
InvalidDataException नीचे देखें लिस्ट

जब एक InvalidDataException को फेंक दिया जाता है, तो इसके 3 कारण हो सकते हैं:

  • स्ट्रीम की सामग्री को ज़िप आर्काइव के रूप में व्याख्यायित नहीं किया जा सकता है
  • मोड अपडेट है और संग्रह से एक प्रविष्टि गायब है या भ्रष्ट है और पढ़ा नहीं जा सकता है
  • मोड अपडेट है और मेमोरी में फिट होने के लिए एक प्रविष्टि बहुत बड़ी है

सभी जानकारी इस MSDN पृष्ठ से ली गई है

ज़िप सामग्री की सूची बनाना

यह स्निपेट एक ज़िप आर्काइव के सभी फ़ाइलनामों को सूचीबद्ध करेगा। फ़ाइल नाम ज़िप रूट के सापेक्ष हैं।

using (FileStream fs = new FileStream("archive.zip", FileMode.Open))
using (ZipArchive archive = new ZipArchive(fs, ZipArchiveMode.Read))
{
    for (int i = 0; i < archive.Entries.Count; i++)
    {
        Console.WriteLine($"{i}: {archive.Entries[i]}");
    }
}

ज़िप फ़ाइलों से फ़ाइलें निकालना

निर्देशिका में सभी फ़ाइलों को निकालना बहुत आसान है:

using (FileStream fs = new FileStream("archive.zip", FileMode.Open))
using (ZipArchive archive = new ZipArchive(fs, ZipArchiveMode.Read))
{
    archive.ExtractToDirectory(AppDomain.CurrentDomain.BaseDirectory);
}

जब फ़ाइल पहले से मौजूद है, तो एक System.IO.IOException को फेंक दिया जाएगा।

विशिष्ट फ़ाइलें निकालना:

using (FileStream fs = new FileStream("archive.zip", FileMode.Open))
using (ZipArchive archive = new ZipArchive(fs, ZipArchiveMode.Read))
{
    // Get a root entry file
    archive.GetEntry("test.txt").ExtractToFile("test_extracted_getentries.txt", true);

    // Enter a path if you want to extract files from a subdirectory
    archive.GetEntry("sub/subtest.txt").ExtractToFile("test_sub.txt", true);

    // You can also use the Entries property to find files
    archive.Entries.FirstOrDefault(f => f.Name == "test.txt")?.ExtractToFile("test_extracted_linq.txt", true);

    // This will throw a System.ArgumentNullException because the file cannot be found
    archive.GetEntry("nonexistingfile.txt").ExtractToFile("fail.txt", true);
}

इनमें से कोई भी विधि समान परिणाम देगी।

एक जिप फाइल को अपडेट करना

एक जिप फाइल को अपडेट करने के लिए, फाइल को ZipArchiveMode.Update के साथ खोलना होगा।

using (FileStream fs = new FileStream("archive.zip", FileMode.Open))
using (ZipArchive archive = new ZipArchive(fs, ZipArchiveMode.Update))
{
    // Add file to root
    archive.CreateEntryFromFile("test.txt", "test.txt");

    // Add file to subfolder
    archive.CreateEntryFromFile("test.txt", "symbols/test.txt");
}

संग्रह के भीतर फ़ाइल में सीधे लिखने का विकल्प भी है:

var entry = archive.CreateEntry("createentry.txt");
using(var writer = new StreamWriter(entry.Open()))
{
    writer.WriteLine("Test line");
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow