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 }