public static XRefArchive Open(string file, XRefArchiveMode mode) { if (file == null) { throw new ArgumentNullException(nameof(file)); } FileStream fs = null; ZipArchive archive = null; try { bool isReadOnly = false; List <string> entries; switch (mode) { case XRefArchiveMode.Read: isReadOnly = true; goto case XRefArchiveMode.Update; case XRefArchiveMode.Update: if (!File.Exists(file)) { throw new FileNotFoundException($"File not found: {file}", file); } fs = File.Open(file, FileMode.Open, isReadOnly ? FileAccess.Read : FileAccess.ReadWrite); archive = new ZipArchive(fs, isReadOnly ? ZipArchiveMode.Read : ZipArchiveMode.Update); entries = (from entry in archive.Entries select entry.FullName).ToList(); entries.Sort(StringComparer.OrdinalIgnoreCase); break; case XRefArchiveMode.Create: var directory = Path.GetDirectoryName(file); if (!string.IsNullOrEmpty(directory)) { Directory.CreateDirectory(directory); } fs = File.Create(file); archive = new ZipArchive(fs, ZipArchiveMode.Update); entries = new List <string>(); break; default: throw new ArgumentOutOfRangeException(nameof(mode)); } return(new XRefArchive(mode, archive, entries)); } catch (Exception) when(fs != null) { if (archive != null) { archive.Dispose(); } fs.Close(); throw; } }
public static XRefArchive Open(string file, XRefArchiveMode mode) { if (file == null) { throw new ArgumentNullException(nameof(file)); } FileStream fs = null; ZipArchive archive = null; try { bool isReadOnly = false; List<string> entries; switch (mode) { case XRefArchiveMode.Read: isReadOnly = true; goto case XRefArchiveMode.Update; case XRefArchiveMode.Update: if (!File.Exists(file)) { throw new FileNotFoundException($"File not found: {file}", file); } fs = File.Open(file, FileMode.Open, isReadOnly ? FileAccess.Read : FileAccess.ReadWrite); archive = new ZipArchive(fs, isReadOnly ? ZipArchiveMode.Read : ZipArchiveMode.Update); entries = (from entry in archive.Entries select entry.FullName).ToList(); entries.Sort(StringComparer.OrdinalIgnoreCase); break; case XRefArchiveMode.Create: var directory = Path.GetDirectoryName(file); if (!string.IsNullOrEmpty(directory)) { Directory.CreateDirectory(directory); } fs = File.Create(file); archive = new ZipArchive(fs, ZipArchiveMode.Update); entries = new List<string>(); break; default: throw new ArgumentOutOfRangeException(nameof(mode)); } return new XRefArchive(mode, archive, entries); } catch (Exception) when (fs != null) { if (archive != null) { archive.Dispose(); } fs.Close(); throw; } }
private XRefArchive(XRefArchiveMode mode, ZipArchive archive, List <string> entries) { _mode = mode; _archive = archive; _entries = entries; }
private XRefArchive(XRefArchiveMode mode, ZipArchive archive, List<string> entries) { _mode = mode; _archive = archive; _entries = entries; }