-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathArchive.cs
94 lines (67 loc) · 3.21 KB
/
Archive.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
using System;
using System.IO;
namespace Gsemac.IO.Compression {
public static class Archive {
// Public members
public static IArchive Open(string filePath, IFileFormat format) {
return Open(filePath, format, ArchiveOptions.Default);
}
public static IArchive Open(string filePath, IFileFormat format, IArchiveOptions options) {
return ArchiveFactory.Default.Open(filePath, format, options);
}
public static IArchive Open(string filePath) {
return Open(filePath, ArchiveOptions.Default);
}
public static IArchive Open(string filePath, IArchiveOptions options) {
return ArchiveFactory.Default.Open(filePath, options);
}
public static IArchive Open(string filePath, FileAccess fileAccess) {
return ArchiveFactory.Default.Open(filePath, fileAccess);
}
public static IArchive OpenRead(string filePath) {
return ArchiveFactory.Default.OpenRead(filePath);
}
public static IArchive OpenWrite(string filePath) {
return ArchiveFactory.Default.OpenWrite(filePath);
}
public static void Extract(string filePath) {
Extract(filePath, new ArchiveExtractionOptions() {
ExtractToNewFolder = true,
});
}
public static void Extract(string filePath, string directoryPath) {
Extract(filePath, new ArchiveExtractionOptions() {
OutputDirectoryPath = directoryPath,
ExtractToNewFolder = false,
});
}
public static void Extract(string filePath, bool extractToNewFolder) {
Extract(filePath, new ArchiveExtractionOptions() {
ExtractToNewFolder = extractToNewFolder,
});
}
public static void Extract(string filePath, IArchiveExtractionOptions options) {
if (options is null)
throw new ArgumentNullException(nameof(options));
string outputPath = string.IsNullOrWhiteSpace(options.OutputDirectoryPath) ?
Path.GetDirectoryName(filePath) :
options.OutputDirectoryPath;
if (options.ExtractToNewFolder)
outputPath = Path.Combine(outputPath, PathUtilities.GetFileNameWithoutExtension(filePath));
IArchiveOptions archiveOptions = new ArchiveOptions() {
Password = options.Password,
FileAccess = FileAccess.Read,
};
using (IArchive archive = Open(filePath, archiveOptions))
archive.ExtractAllEntries(outputPath);
}
public static void ExtractFile(string archiveFilePath, string filePathInArchive, string outputFilePath) {
string directoryPath = Path.GetDirectoryName(outputFilePath);
if (!string.IsNullOrEmpty(directoryPath) && !Directory.Exists(directoryPath))
Directory.CreateDirectory(directoryPath);
using (IArchive archive = OpenRead(archiveFilePath))
using (FileStream outputStream = File.OpenWrite(outputFilePath))
archive.ExtractEntry(archive.GetEntry(filePathInArchive), outputStream);
}
}
}