Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ZipFile.cs
Go to the documentation of this file.
2using System.Text;
3
5
6public static class ZipFile
7{
8 public static ZipArchive OpenRead(string archiveFileName)
9 {
10 return Open(archiveFileName, ZipArchiveMode.Read);
11 }
12
13 public static ZipArchive Open(string archiveFileName, ZipArchiveMode mode)
14 {
15 return Open(archiveFileName, mode, null);
16 }
17
18 public static ZipArchive Open(string archiveFileName, ZipArchiveMode mode, Encoding? entryNameEncoding)
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 }
54
55 public static void CreateFromDirectory(string sourceDirectoryName, string destinationArchiveFileName)
56 {
57 DoCreateFromDirectory(sourceDirectoryName, destinationArchiveFileName, null, includeBaseDirectory: false, null);
58 }
59
60 public static void CreateFromDirectory(string sourceDirectoryName, string destinationArchiveFileName, CompressionLevel compressionLevel, bool includeBaseDirectory)
61 {
62 DoCreateFromDirectory(sourceDirectoryName, destinationArchiveFileName, compressionLevel, includeBaseDirectory, null);
63 }
64
65 public static void CreateFromDirectory(string sourceDirectoryName, string destinationArchiveFileName, CompressionLevel compressionLevel, bool includeBaseDirectory, Encoding? entryNameEncoding)
66 {
67 DoCreateFromDirectory(sourceDirectoryName, destinationArchiveFileName, compressionLevel, includeBaseDirectory, entryNameEncoding);
68 }
69
70 private static void DoCreateFromDirectory(string sourceDirectoryName, string destinationArchiveFileName, CompressionLevel? compressionLevel, bool includeBaseDirectory, Encoding entryNameEncoding)
71 {
72 sourceDirectoryName = Path.GetFullPath(sourceDirectoryName);
73 destinationArchiveFileName = Path.GetFullPath(destinationArchiveFileName);
74 using ZipArchive zipArchive = Open(destinationArchiveFileName, ZipArchiveMode.Create, entryNameEncoding);
75 bool flag = true;
76 DirectoryInfo directoryInfo = new DirectoryInfo(sourceDirectoryName);
77 string fullName = directoryInfo.FullName;
78 if (includeBaseDirectory && directoryInfo.Parent != null)
79 {
80 fullName = directoryInfo.Parent.FullName;
81 }
82 char[] buffer = ArrayPool<char>.Shared.Rent(260);
83 try
84 {
85 foreach (FileSystemInfo item in directoryInfo.EnumerateFileSystemInfos("*", SearchOption.AllDirectories))
86 {
87 flag = false;
88 int length = item.FullName.Length - fullName.Length;
89 if (item is FileInfo)
90 {
91 string entryName = ZipFileUtils.EntryFromPath(item.FullName, fullName.Length, length, ref buffer);
92 zipArchive.DoCreateEntryFromFile(item.FullName, entryName, compressionLevel);
93 }
94 else if (item is DirectoryInfo possiblyEmptyDir && ZipFileUtils.IsDirEmpty(possiblyEmptyDir))
95 {
96 string entryName2 = ZipFileUtils.EntryFromPath(item.FullName, fullName.Length, length, ref buffer, appendPathSeparator: true);
97 zipArchive.CreateEntry(entryName2);
98 }
99 }
100 if (includeBaseDirectory && flag)
101 {
102 zipArchive.CreateEntry(ZipFileUtils.EntryFromPath(directoryInfo.Name, 0, directoryInfo.Name.Length, ref buffer, appendPathSeparator: true));
103 }
104 }
105 finally
106 {
108 }
109 }
110
111 public static void ExtractToDirectory(string sourceArchiveFileName, string destinationDirectoryName)
112 {
113 ExtractToDirectory(sourceArchiveFileName, destinationDirectoryName, null, overwriteFiles: false);
114 }
115
116 public static void ExtractToDirectory(string sourceArchiveFileName, string destinationDirectoryName, bool overwriteFiles)
117 {
118 ExtractToDirectory(sourceArchiveFileName, destinationDirectoryName, null, overwriteFiles);
119 }
120
121 public static void ExtractToDirectory(string sourceArchiveFileName, string destinationDirectoryName, Encoding? entryNameEncoding)
122 {
123 ExtractToDirectory(sourceArchiveFileName, destinationDirectoryName, entryNameEncoding, overwriteFiles: false);
124 }
125
126 public static void ExtractToDirectory(string sourceArchiveFileName, string destinationDirectoryName, Encoding? entryNameEncoding, bool overwriteFiles)
127 {
128 if (sourceArchiveFileName == null)
129 {
130 throw new ArgumentNullException("sourceArchiveFileName");
131 }
132 using ZipArchive source = Open(sourceArchiveFileName, ZipArchiveMode.Read, entryNameEncoding);
133 source.ExtractToDirectory(destinationDirectoryName, overwriteFiles);
134 }
135}
static ArrayPool< T > Shared
Definition ArrayPool.cs:7
static bool IsDirEmpty(DirectoryInfo possiblyEmptyDir)
static string EntryFromPath(string entry, int offset, int length, ref char[] buffer, bool appendPathSeparator=false)
static void ExtractToDirectory(string sourceArchiveFileName, string destinationDirectoryName, Encoding? entryNameEncoding)
Definition ZipFile.cs:121
static void ExtractToDirectory(string sourceArchiveFileName, string destinationDirectoryName, bool overwriteFiles)
Definition ZipFile.cs:116
static void CreateFromDirectory(string sourceDirectoryName, string destinationArchiveFileName, CompressionLevel compressionLevel, bool includeBaseDirectory)
Definition ZipFile.cs:60
static ZipArchive Open(string archiveFileName, ZipArchiveMode mode)
Definition ZipFile.cs:13
static ZipArchive OpenRead(string archiveFileName)
Definition ZipFile.cs:8
static void DoCreateFromDirectory(string sourceDirectoryName, string destinationArchiveFileName, CompressionLevel? compressionLevel, bool includeBaseDirectory, Encoding entryNameEncoding)
Definition ZipFile.cs:70
static void ExtractToDirectory(string sourceArchiveFileName, string destinationDirectoryName)
Definition ZipFile.cs:111
static void CreateFromDirectory(string sourceDirectoryName, string destinationArchiveFileName, CompressionLevel compressionLevel, bool includeBaseDirectory, Encoding? entryNameEncoding)
Definition ZipFile.cs:65
static void CreateFromDirectory(string sourceDirectoryName, string destinationArchiveFileName)
Definition ZipFile.cs:55
static ZipArchive Open(string archiveFileName, ZipArchiveMode mode, Encoding? entryNameEncoding)
Definition ZipFile.cs:18
static void ExtractToDirectory(string sourceArchiveFileName, string destinationDirectoryName, Encoding? entryNameEncoding, bool overwriteFiles)
Definition ZipFile.cs:126
IEnumerable< FileSystemInfo > EnumerateFileSystemInfos()
override void Dispose(bool disposing)
static string GetFullPath(string path)
Definition Path.cs:881