Extracting files from ZIP files
suggest changeExtracting all the files into a directory is very easy:
using (FileStream fs = new FileStream("archive.zip", FileMode.Open)) using (ZipArchive archive = new ZipArchive(fs, ZipArchiveMode.Read)) { archive.ExtractToDirectory(AppDomain.CurrentDomain.BaseDirectory); }
When the file already exists, a System.IO.IOException will be thrown.
Extracting specific files:
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); }
Any of these methods will produce the same result.
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents