19    {
   20        FileMode mode2;
   21        FileAccess access;
   22        FileShare share;
   23        switch (mode)
   24        {
   25        case ZipArchiveMode.Read:
   26            mode2 = FileMode.Open;
   27            access = FileAccess.Read;
   28            share = FileShare.Read;
   29            break;
   30        case ZipArchiveMode.Create:
   31            mode2 = FileMode.CreateNew;
   32            access = FileAccess.Write;
   33            share = FileShare.None;
   34            break;
   35        case ZipArchiveMode.Update:
   36            mode2 = FileMode.OpenOrCreate;
   37            access = FileAccess.ReadWrite;
   38            share = FileShare.None;
   39            break;
   40        default:
   41            throw new ArgumentOutOfRangeException("mode");
   42        }
   43        FileStream fileStream = new FileStream(archiveFileName, mode2, access, share, 4096, useAsync: false);
   44        try
   45        {
   46            return new ZipArchive(fileStream, mode, leaveOpen: false, entryNameEncoding);
   47        }
   48        catch
   49        {
   50            fileStream.Dispose();
   51            throw;
   52        }
   53    }