/// <summary> /// Streams a local zip file using a streamreader. /// Important: the caller must call Dispose() on the returned ZipFile instance. /// </summary> /// <param name="filename">Location of the original zip file</param> /// <param name="zipEntryName">The zip entry name to open a reader for. Specify null to access the first entry</param> /// <param name="zip">The ZipFile instance to be returned to the caller</param> /// <returns>Stream reader of the first file contents in the zip file</returns> public static StreamReader Unzip(string filename, string zipEntryName, out ZipFile zip) { StreamReader reader = null; zip = null; try { if (File.Exists(filename)) { try { zip = new ZipFile(filename); var entry = zip.FirstOrDefault(x => zipEntryName == null || string.Compare(x.FileName, zipEntryName, StringComparison.OrdinalIgnoreCase) == 0); if (entry == null) { // Unable to locate zip entry return(null); } reader = new StreamReader(entry.OpenReader()); } catch (Exception err) { Log.Error(err, "Inner try/catch"); if (zip != null) { zip.Dispose(); } if (reader != null) { reader.Close(); } } } else { Log.Error($"Data.UnZip(2): File doesn\'t exist: {filename}"); } } catch (Exception err) { Log.Error(err, "File: " + filename); } return(reader); }
/// <summary> /// Streams a local zip file using a streamreader. /// Important: the caller must call Dispose() on the returned ZipFile instance. /// </summary> /// <param name="filename">Location of the original zip file</param> /// <param name="zipEntryName">The zip entry name to open a reader for. Specify null to access the first entry</param> /// <param name="zip">The ZipFile instance to be returned to the caller</param> /// <returns>Stream reader of the first file contents in the zip file</returns> public static StreamReader Unzip(string filename, string zipEntryName, out ZipFile zip) { StreamReader reader = null; zip = null; try { if (File.Exists(filename)) { try { zip = new ZipFile(filename); var entry = zip.FirstOrDefault(x => zipEntryName == null || string.Compare(x.FileName, zipEntryName, StringComparison.OrdinalIgnoreCase) == 0); if (entry == null) { throw new ArgumentException("Unable to locate zip entry with name: " + zipEntryName); } reader = new StreamReader(entry.OpenReader()); } catch (Exception err) { Log.Error(err, "Inner try/catch"); if (zip != null) zip.Dispose(); if (reader != null) reader.Close(); } } else { Log.Error("Data.UnZip(2): File doesn't exist: " + filename); } } catch (Exception err) { Log.Error(err, "File: " + filename); } return reader; }