Files
2026-06-04 11:42:34 +02:00

513 lines
14 KiB
C#

using System;
using System.Collections;
using System.IO;
using ICSharpCode.SharpZipLib.Core;
namespace ICSharpCode.SharpZipLib.Zip
{
// Token: 0x0200004B RID: 75
public class FastZip
{
// Token: 0x060002F0 RID: 752 RVA: 0x0001094A File Offset: 0x0000F94A
public FastZip()
{
}
// Token: 0x060002F1 RID: 753 RVA: 0x00010964 File Offset: 0x0000F964
public FastZip(FastZipEvents events)
{
this.events_ = events;
}
// Token: 0x1700009E RID: 158
// (get) Token: 0x060002F2 RID: 754 RVA: 0x00010985 File Offset: 0x0000F985
// (set) Token: 0x060002F3 RID: 755 RVA: 0x0001098D File Offset: 0x0000F98D
public bool CreateEmptyDirectories
{
get
{
return this.createEmptyDirectories_;
}
set
{
this.createEmptyDirectories_ = value;
}
}
// Token: 0x1700009F RID: 159
// (get) Token: 0x060002F4 RID: 756 RVA: 0x00010996 File Offset: 0x0000F996
// (set) Token: 0x060002F5 RID: 757 RVA: 0x0001099E File Offset: 0x0000F99E
public string Password
{
get
{
return this.password_;
}
set
{
this.password_ = value;
}
}
// Token: 0x170000A0 RID: 160
// (get) Token: 0x060002F6 RID: 758 RVA: 0x000109A7 File Offset: 0x0000F9A7
// (set) Token: 0x060002F7 RID: 759 RVA: 0x000109B4 File Offset: 0x0000F9B4
public INameTransform NameTransform
{
get
{
return this.entryFactory_.NameTransform;
}
set
{
this.entryFactory_.NameTransform = value;
}
}
// Token: 0x170000A1 RID: 161
// (get) Token: 0x060002F8 RID: 760 RVA: 0x000109C2 File Offset: 0x0000F9C2
// (set) Token: 0x060002F9 RID: 761 RVA: 0x000109CA File Offset: 0x0000F9CA
public IEntryFactory EntryFactory
{
get
{
return this.entryFactory_;
}
set
{
if (value == null)
{
this.entryFactory_ = new ZipEntryFactory();
return;
}
this.entryFactory_ = value;
}
}
// Token: 0x170000A2 RID: 162
// (get) Token: 0x060002FA RID: 762 RVA: 0x000109E2 File Offset: 0x0000F9E2
// (set) Token: 0x060002FB RID: 763 RVA: 0x000109EA File Offset: 0x0000F9EA
public UseZip64 UseZip64
{
get
{
return this.useZip64_;
}
set
{
this.useZip64_ = value;
}
}
// Token: 0x170000A3 RID: 163
// (get) Token: 0x060002FC RID: 764 RVA: 0x000109F3 File Offset: 0x0000F9F3
// (set) Token: 0x060002FD RID: 765 RVA: 0x000109FB File Offset: 0x0000F9FB
public bool RestoreDateTimeOnExtract
{
get
{
return this.restoreDateTimeOnExtract_;
}
set
{
this.restoreDateTimeOnExtract_ = value;
}
}
// Token: 0x170000A4 RID: 164
// (get) Token: 0x060002FE RID: 766 RVA: 0x00010A04 File Offset: 0x0000FA04
// (set) Token: 0x060002FF RID: 767 RVA: 0x00010A0C File Offset: 0x0000FA0C
public bool RestoreAttributesOnExtract
{
get
{
return this.restoreAttributesOnExtract_;
}
set
{
this.restoreAttributesOnExtract_ = value;
}
}
// Token: 0x06000300 RID: 768 RVA: 0x00010A15 File Offset: 0x0000FA15
public void CreateZip(string zipFileName, string sourceDirectory, bool recurse, string fileFilter, string directoryFilter)
{
this.CreateZip(File.Create(zipFileName), sourceDirectory, recurse, fileFilter, directoryFilter);
}
// Token: 0x06000301 RID: 769 RVA: 0x00010A29 File Offset: 0x0000FA29
public void CreateZip(string zipFileName, string sourceDirectory, bool recurse, string fileFilter)
{
this.CreateZip(File.Create(zipFileName), sourceDirectory, recurse, fileFilter, null);
}
// Token: 0x06000302 RID: 770 RVA: 0x00010A3C File Offset: 0x0000FA3C
public void CreateZip(Stream outputStream, string sourceDirectory, bool recurse, string fileFilter, string directoryFilter)
{
this.NameTransform = new ZipNameTransform(sourceDirectory);
this.sourceDirectory_ = sourceDirectory;
using (this.outputStream_ = new ZipOutputStream(outputStream))
{
if (this.password_ != null)
{
this.outputStream_.Password = this.password_;
}
this.outputStream_.UseZip64 = this.UseZip64;
FileSystemScanner fileSystemScanner = new FileSystemScanner(fileFilter, directoryFilter);
FileSystemScanner fileSystemScanner2 = fileSystemScanner;
fileSystemScanner2.ProcessFile = (ProcessFileHandler)Delegate.Combine(fileSystemScanner2.ProcessFile, new ProcessFileHandler(this.ProcessFile));
if (this.CreateEmptyDirectories)
{
FileSystemScanner fileSystemScanner3 = fileSystemScanner;
fileSystemScanner3.ProcessDirectory = (ProcessDirectoryHandler)Delegate.Combine(fileSystemScanner3.ProcessDirectory, new ProcessDirectoryHandler(this.ProcessDirectory));
}
if (this.events_ != null)
{
if (this.events_.FileFailure != null)
{
FileSystemScanner fileSystemScanner4 = fileSystemScanner;
fileSystemScanner4.FileFailure = (FileFailureHandler)Delegate.Combine(fileSystemScanner4.FileFailure, this.events_.FileFailure);
}
if (this.events_.DirectoryFailure != null)
{
FileSystemScanner fileSystemScanner5 = fileSystemScanner;
fileSystemScanner5.DirectoryFailure = (DirectoryFailureHandler)Delegate.Combine(fileSystemScanner5.DirectoryFailure, this.events_.DirectoryFailure);
}
}
fileSystemScanner.Scan(sourceDirectory, recurse);
}
}
// Token: 0x06000303 RID: 771 RVA: 0x00010B74 File Offset: 0x0000FB74
public void ExtractZip(string zipFileName, string targetDirectory, string fileFilter)
{
this.ExtractZip(zipFileName, targetDirectory, FastZip.Overwrite.Always, null, fileFilter, null, this.restoreDateTimeOnExtract_);
}
// Token: 0x06000304 RID: 772 RVA: 0x00010B88 File Offset: 0x0000FB88
public void ExtractZip(string zipFileName, string targetDirectory, FastZip.Overwrite overwrite, FastZip.ConfirmOverwriteDelegate confirmDelegate, string fileFilter, string directoryFilter, bool restoreDateTime)
{
Stream stream = File.Open(zipFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
this.ExtractZip(stream, targetDirectory, overwrite, confirmDelegate, fileFilter, directoryFilter, restoreDateTime, true);
}
// Token: 0x06000305 RID: 773 RVA: 0x00010BB4 File Offset: 0x0000FBB4
public void ExtractZip(Stream inputStream, string targetDirectory, FastZip.Overwrite overwrite, FastZip.ConfirmOverwriteDelegate confirmDelegate, string fileFilter, string directoryFilter, bool restoreDateTime, bool isStreamOwner)
{
if (overwrite == FastZip.Overwrite.Prompt && confirmDelegate == null)
{
throw new ArgumentNullException("confirmDelegate");
}
this.continueRunning_ = true;
this.overwrite_ = overwrite;
this.confirmDelegate_ = confirmDelegate;
this.extractNameTransform_ = new WindowsNameTransform(targetDirectory);
this.fileFilter_ = new NameFilter(fileFilter);
this.directoryFilter_ = new NameFilter(directoryFilter);
this.restoreDateTimeOnExtract_ = restoreDateTime;
using (this.zipFile_ = new ZipFile(inputStream))
{
if (this.password_ != null)
{
this.zipFile_.Password = this.password_;
}
this.zipFile_.IsStreamOwner = isStreamOwner;
IEnumerator enumerator = this.zipFile_.GetEnumerator();
while (this.continueRunning_ && enumerator.MoveNext())
{
ZipEntry zipEntry = (ZipEntry)enumerator.Current;
if (zipEntry.IsFile)
{
if (this.directoryFilter_.IsMatch(Path.GetDirectoryName(zipEntry.Name)) && this.fileFilter_.IsMatch(zipEntry.Name))
{
this.ExtractEntry(zipEntry);
}
}
else if (zipEntry.IsDirectory && this.directoryFilter_.IsMatch(zipEntry.Name) && this.CreateEmptyDirectories)
{
this.ExtractEntry(zipEntry);
}
}
}
}
// Token: 0x06000306 RID: 774 RVA: 0x00010CFC File Offset: 0x0000FCFC
private void ProcessDirectory(object sender, DirectoryEventArgs e)
{
if (!e.HasMatchingFiles && this.CreateEmptyDirectories)
{
if (this.events_ != null)
{
this.events_.OnProcessDirectory(e.Name, e.HasMatchingFiles);
}
if (e.ContinueRunning && e.Name != this.sourceDirectory_)
{
ZipEntry zipEntry = this.entryFactory_.MakeDirectoryEntry(e.Name);
this.outputStream_.PutNextEntry(zipEntry);
}
}
}
// Token: 0x06000307 RID: 775 RVA: 0x00010D74 File Offset: 0x0000FD74
private void ProcessFile(object sender, ScanEventArgs e)
{
if (this.events_ != null && this.events_.ProcessFile != null)
{
this.events_.ProcessFile(sender, e);
}
if (e.ContinueRunning)
{
try
{
using (FileStream fileStream = File.Open(e.Name, FileMode.Open, FileAccess.Read, FileShare.Read))
{
ZipEntry zipEntry = this.entryFactory_.MakeFileEntry(e.Name);
this.outputStream_.PutNextEntry(zipEntry);
this.AddFileContents(e.Name, fileStream);
}
}
catch (Exception ex)
{
if (this.events_ == null)
{
this.continueRunning_ = false;
throw;
}
this.continueRunning_ = this.events_.OnFileFailure(e.Name, ex);
}
}
}
// Token: 0x06000308 RID: 776 RVA: 0x00010E44 File Offset: 0x0000FE44
private void AddFileContents(string name, Stream stream)
{
if (stream == null)
{
throw new ArgumentNullException("stream");
}
if (this.buffer_ == null)
{
this.buffer_ = new byte[4096];
}
if (this.events_ != null && this.events_.Progress != null)
{
StreamUtils.Copy(stream, this.outputStream_, this.buffer_, this.events_.Progress, this.events_.ProgressInterval, this, name);
}
else
{
StreamUtils.Copy(stream, this.outputStream_, this.buffer_);
}
if (this.events_ != null)
{
this.continueRunning_ = this.events_.OnCompletedFile(name);
}
}
// Token: 0x06000309 RID: 777 RVA: 0x00010EE4 File Offset: 0x0000FEE4
private void ExtractFileEntry(ZipEntry entry, string targetName)
{
bool flag = true;
if (this.overwrite_ != FastZip.Overwrite.Always && File.Exists(targetName))
{
flag = this.overwrite_ == FastZip.Overwrite.Prompt && this.confirmDelegate_ != null && this.confirmDelegate_(targetName);
}
if (flag)
{
if (this.events_ != null)
{
this.continueRunning_ = this.events_.OnProcessFile(entry.Name);
}
if (this.continueRunning_)
{
try
{
using (FileStream fileStream = File.Create(targetName))
{
if (this.buffer_ == null)
{
this.buffer_ = new byte[4096];
}
if (this.events_ != null && this.events_.Progress != null)
{
StreamUtils.Copy(this.zipFile_.GetInputStream(entry), fileStream, this.buffer_, this.events_.Progress, this.events_.ProgressInterval, this, entry.Name, entry.Size);
}
else
{
StreamUtils.Copy(this.zipFile_.GetInputStream(entry), fileStream, this.buffer_);
}
if (this.events_ != null)
{
this.continueRunning_ = this.events_.OnCompletedFile(entry.Name);
}
}
if (this.restoreDateTimeOnExtract_)
{
File.SetLastWriteTime(targetName, entry.DateTime);
}
if (this.RestoreAttributesOnExtract && entry.IsDOSEntry && entry.ExternalFileAttributes != -1)
{
FileAttributes fileAttributes = (FileAttributes)entry.ExternalFileAttributes;
fileAttributes &= FileAttributes.Archive | FileAttributes.Hidden | FileAttributes.Normal | FileAttributes.ReadOnly;
File.SetAttributes(targetName, fileAttributes);
}
}
catch (Exception ex)
{
if (this.events_ == null)
{
this.continueRunning_ = false;
throw;
}
this.continueRunning_ = this.events_.OnFileFailure(targetName, ex);
}
}
}
}
// Token: 0x0600030A RID: 778 RVA: 0x00011094 File Offset: 0x00010094
private void ExtractEntry(ZipEntry entry)
{
bool flag = entry.IsCompressionMethodSupported();
string text = entry.Name;
if (flag)
{
if (entry.IsFile)
{
text = this.extractNameTransform_.TransformFile(text);
}
else if (entry.IsDirectory)
{
text = this.extractNameTransform_.TransformDirectory(text);
}
flag = text != null && text.Length != 0;
}
string text2 = null;
if (flag)
{
if (entry.IsDirectory)
{
text2 = text;
}
else
{
text2 = Path.GetDirectoryName(Path.GetFullPath(text));
}
}
if (flag && !Directory.Exists(text2))
{
if (entry.IsDirectory)
{
if (!this.CreateEmptyDirectories)
{
goto IL_D9;
}
}
try
{
Directory.CreateDirectory(text2);
}
catch (Exception ex)
{
flag = false;
if (this.events_ == null)
{
this.continueRunning_ = false;
throw;
}
if (entry.IsDirectory)
{
this.continueRunning_ = this.events_.OnDirectoryFailure(text, ex);
}
else
{
this.continueRunning_ = this.events_.OnFileFailure(text, ex);
}
}
}
IL_D9:
if (flag && entry.IsFile)
{
this.ExtractFileEntry(entry, text);
}
}
// Token: 0x0600030B RID: 779 RVA: 0x000111A0 File Offset: 0x000101A0
private static int MakeExternalAttributes(FileInfo info)
{
return (int)info.Attributes;
}
// Token: 0x0600030C RID: 780 RVA: 0x000111A8 File Offset: 0x000101A8
private static bool NameIsValid(string name)
{
return name != null && name.Length > 0 && name.IndexOfAny(Path.GetInvalidPathChars()) < 0;
}
// Token: 0x04000209 RID: 521
private bool continueRunning_;
// Token: 0x0400020A RID: 522
private byte[] buffer_;
// Token: 0x0400020B RID: 523
private ZipOutputStream outputStream_;
// Token: 0x0400020C RID: 524
private ZipFile zipFile_;
// Token: 0x0400020D RID: 525
private string sourceDirectory_;
// Token: 0x0400020E RID: 526
private NameFilter fileFilter_;
// Token: 0x0400020F RID: 527
private NameFilter directoryFilter_;
// Token: 0x04000210 RID: 528
private FastZip.Overwrite overwrite_;
// Token: 0x04000211 RID: 529
private FastZip.ConfirmOverwriteDelegate confirmDelegate_;
// Token: 0x04000212 RID: 530
private bool restoreDateTimeOnExtract_;
// Token: 0x04000213 RID: 531
private bool restoreAttributesOnExtract_;
// Token: 0x04000214 RID: 532
private bool createEmptyDirectories_;
// Token: 0x04000215 RID: 533
private FastZipEvents events_;
// Token: 0x04000216 RID: 534
private IEntryFactory entryFactory_ = new ZipEntryFactory();
// Token: 0x04000217 RID: 535
private INameTransform extractNameTransform_;
// Token: 0x04000218 RID: 536
private UseZip64 useZip64_ = UseZip64.Dynamic;
// Token: 0x04000219 RID: 537
private string password_;
// Token: 0x0200004C RID: 76
public enum Overwrite
{
// Token: 0x0400021B RID: 539
Prompt,
// Token: 0x0400021C RID: 540
Never,
// Token: 0x0400021D RID: 541
Always
}
// Token: 0x0200004D RID: 77
// (Invoke) Token: 0x0600030E RID: 782
public delegate bool ConfirmOverwriteDelegate(string fileName);
}
}