Exemple #1
0
        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;
            }
        }
Exemple #2
0
 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;
     }
 }
Exemple #3
0
 private XRefArchive(XRefArchiveMode mode, ZipArchive archive, List <string> entries)
 {
     _mode    = mode;
     _archive = archive;
     _entries = entries;
 }
Exemple #4
0
 private XRefArchive(XRefArchiveMode mode, ZipArchive archive, List<string> entries)
 {
     _mode = mode;
     _archive = archive;
     _entries = entries;
 }