BadScript 2
Loading...
Searching...
No Matches
BadZipApi.cs
Go to the documentation of this file.
1using System.IO.Compression;
2
3using BadScript2.IO;
4
6
7[BadInteropApi("Zip", true)]
8internal partial class BadZipApi
9{
14
15
20 public BadZipApi(IFileSystem fileSystem) : this()
21 {
22 m_FileSystem = fileSystem;
23 }
24
30 [BadMethod("ToDirectory", "Extracts a Zip Archive to the given directory")]
31 private void ToDirectoryApi([BadParameter(description: "Output Directory")] string outputDir,
32 [BadParameter(description: "Input File")] string inputFile)
33 {
34 using Stream s = m_FileSystem.OpenRead(inputFile);
35 ToDirectory(outputDir, s);
36 }
37
43 [BadMethod("FromDirectory", "Creates a new Zip Archive from the given directory")]
44 private void FromDirectoryApi([BadParameter(description: "Input Directory")] string inputDir,
45 [BadParameter(description: "Output File")] string outputFile)
46 {
47 using Stream s = m_FileSystem.OpenWrite(outputFile, BadWriteMode.CreateNew);
48 FromDirectory(inputDir, s);
49 }
50
56 private void ToDirectory(string outputDir, Stream input)
57 {
58 using ZipArchive archive = new ZipArchive(input, ZipArchiveMode.Read);
59
60 foreach (ZipArchiveEntry entry in archive.Entries)
61 {
62 string outputFile = Path.Combine(outputDir, entry.FullName);
63 string outputParent = Path.GetDirectoryName(outputFile)!;
64 m_FileSystem.CreateDirectory(outputParent, true);
65 using Stream s = m_FileSystem.OpenWrite(outputFile, BadWriteMode.CreateNew);
66 using Stream e = entry.Open();
67 e.CopyTo(s);
68 }
69 }
70
76 private void FromDirectory(string inputDir, Stream output)
77 {
78 using ZipArchive archive = new ZipArchive(output, ZipArchiveMode.Create);
79
80 string[] files = m_FileSystem.GetFiles(inputDir, "", true)
81 .ToArray();
82
83 foreach (string file in files)
84 {
85 string zipPath = file.Remove(0, inputDir.Length + 1)
86 .Replace('\\', '/');
87 ZipArchiveEntry entry = archive.CreateEntry(zipPath);
88 using Stream es = entry.Open();
89 using Stream s = m_FileSystem.OpenRead(file);
90 s.CopyTo(es);
91 }
92 }
93}
Public interface for the filesystem abstraction of the BadScript Engine.
static IFileSystem Instance
File System implementation.
void ToDirectory(string outputDir, Stream input)
Decompresses the given stream to the given output directory.
Definition BadZipApi.cs:56
void FromDirectoryApi([BadParameter(description:"Input Directory")] string inputDir, [BadParameter(description:"Output File")] string outputFile)
Compreses the given directory to the given output file.
Definition BadZipApi.cs:44
readonly IFileSystem m_FileSystem
The FileSystem Instance.
Definition BadZipApi.cs:13
BadZipApi(IFileSystem fileSystem)
Creates a new API Instance.
Definition BadZipApi.cs:20
void ToDirectoryApi([BadParameter(description:"Output Directory")] string outputDir, [BadParameter(description:"Input File")] string inputFile)
Decompresses the given file to the given output directory.
Definition BadZipApi.cs:31
void FromDirectory(string inputDir, Stream output)
Compreses the given directory to the given output stream.
Definition BadZipApi.cs:76
Defines the interface for a file system.
Definition IFileSystem.cs:7
void CreateDirectory(string path, bool recursive=false)
Creates a new directory.
Stream OpenWrite(string path, BadWriteMode mode)
Opens a file for writing.
IEnumerable< string > GetFiles(string path, string extension, bool recursive)
Returns all files in the given directory that match the specified extension.
Stream OpenRead(string path)
Opens a file for reading.
Contains IO Implementation for the BadScript2 Runtime.
BadWriteMode
The Write Modes of the File System Abstraction.
Contains Compression Extensions and APIs for the BadScript2 Runtime.