.NET Framework
ज़िप फ़ाइलों को पढ़ना और लिखना
खोज…
परिचय
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