/// <summary> Currently only works when working with a physical file system for the target directory </summary> public static void ExtractIntoDir(this FileEntry self, DirectoryEntry targetDir) { if (targetDir.Exists) { throw new IOException("Target dir to extract zip into already exists: " + targetDir); } var fastZip = new FastZip(); FastZip.ConfirmOverwriteDelegate confCallback = (fileName) => false; using (var s = self.Open(FileMode.Open, FileAccess.Read, FileShare.Read)) { fastZip.ExtractZip(s, GetFullFileSystemPath(targetDir), FastZip.Overwrite.Prompt, confCallback, "", "", true, true); } }
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) { if (this.directoryFilter_.IsMatch(zipEntry.Name) && this.CreateEmptyDirectories) { this.ExtractEntry(zipEntry); } } } } }
void Run(string[] args) { bool recurse = false; string arg1 = null; string arg2 = null; string fileFilter = null; string dirFilter = null; bool verbose = false; bool restoreDates = false; bool restoreAttributes = false; bool progress = false; TimeSpan interval = TimeSpan.FromSeconds(1); bool createEmptyDirs = false; FastZip.Overwrite overwrite = FastZip.Overwrite.Always; FastZip.ConfirmOverwriteDelegate confirmOverwrite = null; Operation op = Operation.Unknown; int argCount = 0; for (int i = 0; i < args.Length; ++i) { if (args[i][0] == '-') { string option = args[i].Substring(1).ToLower(); string optArg = ""; int parameterIndex = option.IndexOf('='); if (parameterIndex >= 0) { if (parameterIndex < option.Length - 1) { optArg = option.Substring(parameterIndex + 1); } option = option.Substring(0, parameterIndex); } switch (option) { case "e": case "empty": createEmptyDirs = true; break; case "x": case "extract": if (op == Operation.Unknown) { op = Operation.Extract; } else { Console.WriteLine("Only one operation at a time is permitted"); op = Operation.Error; } break; case "c": case "create": if (op == Operation.Unknown) { op = Operation.Create; } else { Console.WriteLine("Only one operation at a time is permitted"); op = Operation.Error; } break; case "l": case "list": if (op == Operation.Unknown) { op = Operation.List; } else { Console.WriteLine("Only one operation at a time is permitted"); op = Operation.Error; } break; case "p": case "progress": progress = true; verbose = true; break; case "r": case "recurse": recurse = true; break; case "v": case "verbose": verbose = true; break; case "i": if (optArg.Length > 0) { interval = TimeSpan.FromSeconds(int.Parse(optArg)); } break; case "file": if (NameFilter.IsValidFilterExpression(optArg)) { fileFilter = optArg; } else { Console.WriteLine("File filter expression contains an invalid regular expression"); op = Operation.Error; } break; case "dir": if (NameFilter.IsValidFilterExpression(optArg)) { dirFilter = optArg; } else { Console.WriteLine("Path filter expression contains an invalid regular expression"); op = Operation.Error; } break; case "o": case "overwrite": switch (optArg) { case "always": overwrite = FastZip.Overwrite.Always; confirmOverwrite = null; break; case "never": overwrite = FastZip.Overwrite.Never; confirmOverwrite = null; break; case "prompt": overwrite = FastZip.Overwrite.Prompt; confirmOverwrite = new FastZip.ConfirmOverwriteDelegate(ConfirmOverwrite); break; default: Console.WriteLine("Invalid overwrite option"); op = Operation.Error; break; } break; case "oa": restoreAttributes = true; break; case "od": restoreDates = true; break; default: Console.WriteLine("Unknown option {0}", args[i]); op = Operation.Error; break; } } else if (arg1 == null) { arg1 = args[i]; ++argCount; } else if (arg2 == null) { arg2 = args[i]; ++argCount; } } FastZipEvents events = null; if (verbose) { events = new FastZipEvents(); events.ProcessDirectory = new ProcessDirectoryHandler(ProcessDirectory); events.ProcessFile = new ProcessFileHandler(ProcessFile); if (progress) { events.Progress = new ProgressHandler(ShowProgress); events.ProgressInterval = interval; } } FastZip fastZip = new FastZip(events); fastZip.CreateEmptyDirectories = createEmptyDirs; fastZip.RestoreAttributesOnExtract = restoreAttributes; fastZip.RestoreDateTimeOnExtract = restoreDates; switch (op) { case Operation.Create: if (argCount == 2) { Console.WriteLine("Creating Zip"); fastZip.CreateZip(arg1, arg2, recurse, fileFilter, dirFilter); } else { Console.WriteLine("Invalid arguments"); } break; case Operation.Extract: if (argCount == 2) { Console.WriteLine("Extracting Zip"); fastZip.ExtractZip(arg1, arg2, overwrite, confirmOverwrite, fileFilter, dirFilter, restoreDates); } else { Console.WriteLine("zipfile and target directory not specified"); } break; case Operation.List: if (File.Exists(arg1)) { ListZipFile(arg1, fileFilter, dirFilter); } else if (Directory.Exists(arg1)) { ListFileSystem(arg1, recurse, fileFilter, dirFilter); } else { Console.WriteLine("No valid list file or directory"); } break; case Operation.Unknown: Console.WriteLine( "FastZip v0.5\n" + " Usage: FastZip {options} operation args\n" + "Operation Options: (only one permitted)\n" + " -x zipfile targetdir : Extract files from Zip\n" + " -c zipfile sourcedir : Create zip file\n" + " -l zipfile|dir : List elements\n" + "\n" + "Behavioural options:\n" + " -dir={dirFilter}\n" + " -file={fileFilter}\n" + " -e Process empty directories\n" + " -i Progress interval in seconds\n" + " -p Show file progress\n" + " -r Recurse directories\n" + " -v Verbose output\n" + " -oa Restore file attributes on extract\n" + " -ot Restore file date time on extract\n" + " -overwrite=prompt|always|never : Overwrite on extract handling\n" ); break; case Operation.Error: // Do nothing for now... break; } }
void Run(string[] args) { bool recurse = false; string arg1 = null; string arg2 = null; string fileFilter = null; string dirFilter = null; bool verbose = false; bool restoreDates = false; bool restoreAttributes = false; bool progress = false; TimeSpan interval = TimeSpan.FromSeconds(1); bool createEmptyDirs = false; FastZip.Overwrite overwrite = FastZip.Overwrite.Always; FastZip.ConfirmOverwriteDelegate confirmOverwrite = null; Operation op = Operation.Unknown; int argCount = 0; for ( int i = 0; i < args.Length; ++i ) { if ( args[i][0] == '-' ) { string option = args[i].Substring(1).ToLower(); string optArg = ""; int parameterIndex = option.IndexOf('='); if (parameterIndex >= 0) { if (parameterIndex < option.Length - 1) { optArg = option.Substring(parameterIndex + 1); } option = option.Substring(0, parameterIndex); } switch ( option ) { case "e": case "empty": createEmptyDirs = true; break; case "x": case "extract": if ( op == Operation.Unknown ) { op = Operation.Extract; } else { Console.WriteLine("Only one operation at a time is permitted"); op = Operation.Error; } break; case "c": case "create": if ( op == Operation.Unknown ) { op = Operation.Create; } else { Console.WriteLine("Only one operation at a time is permitted"); op = Operation.Error; } break; case "l": case "list": if ( op == Operation.Unknown ) { op = Operation.List; } else { Console.WriteLine("Only one operation at a time is permitted"); op = Operation.Error; } break; case "p": case "progress": progress = true; verbose = true; break; case "r": case "recurse": recurse = true; break; case "v": case "verbose": verbose = true; break; case "i": if (optArg.Length > 0) { interval = TimeSpan.FromSeconds(int.Parse(optArg)); } break; case "file": if ( NameFilter.IsValidFilterExpression(optArg) ) { fileFilter = optArg; } else { Console.WriteLine("File filter expression contains an invalid regular expression"); op = Operation.Error; } break; case "dir": if ( NameFilter.IsValidFilterExpression(optArg) ) { dirFilter = optArg; } else { Console.WriteLine("Path filter expression contains an invalid regular expression"); op = Operation.Error; } break; case "o": case "overwrite": switch ( optArg ) { case "always": overwrite = FastZip.Overwrite.Always; confirmOverwrite = null; break; case "never": overwrite = FastZip.Overwrite.Never; confirmOverwrite = null; break; case "prompt": overwrite = FastZip.Overwrite.Prompt; confirmOverwrite = new FastZip.ConfirmOverwriteDelegate(ConfirmOverwrite); break; default: Console.WriteLine("Invalid overwrite option"); op = Operation.Error; break; } break; case "oa": restoreAttributes = true; break; case "od": restoreDates = true; break; default: Console.WriteLine("Unknown option {0}", args[i]); op = Operation.Error; break; } } else if ( arg1 == null ) { arg1 = args[i]; ++argCount; } else if ( arg2 == null ) { arg2 = args[i]; ++argCount; } } FastZipEvents events = null; if ( verbose ) { events = new FastZipEvents(); events.ProcessDirectory = new ProcessDirectoryHandler(ProcessDirectory); events.ProcessFile = new ProcessFileHandler(ProcessFile); if (progress) { events.Progress = new ProgressHandler(ShowProgress); events.ProgressInterval = interval; } } FastZip fastZip = new FastZip(events); fastZip.CreateEmptyDirectories = createEmptyDirs; fastZip.RestoreAttributesOnExtract = restoreAttributes; fastZip.RestoreDateTimeOnExtract = restoreDates; switch ( op ) { case Operation.Create: if ( argCount == 2 ) { Console.WriteLine("Creating Zip"); fastZip.CreateZip(arg1, arg2, recurse, fileFilter, dirFilter); } else Console.WriteLine("Invalid arguments"); break; case Operation.Extract: if ( argCount == 2 ) { Console.WriteLine("Extracting Zip"); fastZip.ExtractZip(arg1, arg2, overwrite, confirmOverwrite, fileFilter, dirFilter, restoreDates); } else Console.WriteLine("zipfile and target directory not specified"); break; case Operation.List: if ( File.Exists(arg1) ) { ListZipFile(arg1, fileFilter, dirFilter); } else if ( Directory.Exists(arg1) ) { ListFileSystem(arg1, recurse, fileFilter, dirFilter); } else { Console.WriteLine("No valid list file or directory"); } break; case Operation.Unknown: Console.WriteLine( "FastZip v0.5\n" + " Usage: FastZip {options} operation args\n" + "Operation Options: (only one permitted)\n" + " -x zipfile targetdir : Extract files from Zip\n" + " -c zipfile sourcedir : Create zip file\n" + " -l zipfile|dir : List elements\n" + "\n" + "Behavioural options:\n" + " -dir={dirFilter}\n" + " -file={fileFilter}\n" + " -e Process empty directories\n" + " -i Progress interval in seconds\n" + " -p Show file progress\n" + " -r Recurse directories\n" + " -v Verbose output\n" + " -oa Restore file attributes on extract\n" + " -ot Restore file date time on extract\n" + " -overwrite=prompt|always|never : Overwrite on extract handling\n" ); break; case Operation.Error: // Do nothing for now... break; } }
private static async Task DownloadAndExtractPackage(string download_url, string download_to, string extract_basedir, FastZip.ConfirmOverwriteDelegate confirmOverwrite, CancellationToken ct) { StatusText(string.Format("Downloading from {0}", download_url)); Directory.CreateDirectory(UpdatesDir); await DownloadFileWithProgress(download_url, download_to, ct); StatusText(string.Format("Extracting package {0}", Path.GetFileName(download_to))); await Task.Run(() => { var fz = new FastZip(); fz.ExtractZip(download_to, Path.Combine(AppDomain.CurrentDomain.BaseDirectory, extract_basedir), FastZip.Overwrite.Prompt, confirmOverwrite, "", "", true); File.Delete(download_to); }); }
public void ExtractZip(string zipFileName, string targetDirectory, FastZip.Overwrite overwrite, FastZip.ConfirmOverwriteDelegate confirmDelegate, string fileFilter, string directoryFilter, bool restoreDateTime) { if (overwrite == FastZip.Overwrite.Prompt && confirmDelegate == null) { throw new ArgumentNullException("confirmDelegate"); } this.continueRunning_ = true; this.overwrite_ = overwrite; this.confirmDelegate_ = confirmDelegate; this.targetDirectory_ = targetDirectory; this.fileFilter_ = new NameFilter(fileFilter); this.directoryFilter_ = new NameFilter(directoryFilter); this.restoreDateTimeOnExtract_ = restoreDateTime; using (this.inputStream_ = new ZipInputStream(File.OpenRead(zipFileName))) { if (this.password_ != null) { this.inputStream_.Password = this.password_; } ZipEntry nextEntry; while (this.continueRunning_ && (nextEntry = this.inputStream_.GetNextEntry()) != null) { if (this.directoryFilter_.IsMatch(Path.GetDirectoryName(nextEntry.Name)) && this.fileFilter_.IsMatch(nextEntry.Name)) { this.ExtractEntry(nextEntry); } } } }
// Token: 0x060008E3 RID: 2275 RVA: 0x000328FC File Offset: 0x00030AFC public void ExtractZip(string zipFileName, string targetDirectory, FastZip.Overwrite overwrite, FastZip.ConfirmOverwriteDelegate confirmDelegate, string fileFilter, string directoryFilter, bool restoreDateTime) { Stream inputStream = File.Open(zipFileName, FileMode.Open, FileAccess.Read, FileShare.Read); this.ExtractZip(inputStream, targetDirectory, overwrite, confirmDelegate, fileFilter, directoryFilter, restoreDateTime, true); }
internal static void ExtractZipContent(Form1 form1, ZipExtract form, String fileNameAndPath, bool isPasswordProtected) { ToolStripStatusLabel toolStripStatusLabel = form1.toolStripStatusLabel; ToolStripProgressBar toolStripProgressBar = form1.toolStripProgressBar; DataGridView zipContentDataGridView = form.zipContentDataGridView; try { FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog { Description = LanguageUtil.GetCurrentLanguageString("folderBrowserDialogDescription", className), RootFolder = Environment.SpecialFolder.Desktop, SelectedPath = FileUtil.GetInitialFolder(form1) }; if (folderBrowserDialog.ShowDialog(form) != DialogResult.OK) { return; } toolStripProgressBar.Value = 0; toolStripProgressBar.Visible = true; toolStripProgressBar.PerformStep(); String selectedFilesRegExpression = SerializeSelectedFilesToExport(zipContentDataGridView.SelectedRows); toolStripProgressBar.PerformStep(); FastZip zipFile = new FastZip(); if (isPasswordProtected) { WindowManager.ShowNameEntry(form); if (String.IsNullOrEmpty(form.newObjectName)) { toolStripProgressBar.Visible = false; return; } ZipFile testZip = null; bool testResult; try { testZip = new ZipFile(fileNameAndPath) { Password = form.newObjectName }; testResult = testZip.TestArchive(true, TestStrategy.FindFirstError, form1.Zip_Errors); } finally { if (testZip != null) { testZip.Close(); } } if (!testResult) { toolStripProgressBar.Visible = false; return; } zipFile.Password = form.newObjectName; } toolStripProgressBar.PerformStep(); FastZip.ConfirmOverwriteDelegate overDelegate = (PromptOverwrite); zipFile.ExtractZip(fileNameAndPath, folderBrowserDialog.SelectedPath, FastZip.Overwrite.Prompt, overDelegate, selectedFilesRegExpression, String.Empty, true); toolStripProgressBar.PerformStep(); toolStripProgressBar.Visible = false; String success = LanguageUtil.GetCurrentLanguageString("ExtractSuccess", className); toolStripStatusLabel.Text = success; WindowManager.ShowInfoBox(form, success); } catch (Exception exception) { toolStripProgressBar.Visible = false; WindowManager.ShowErrorBox(form, exception.Message, exception); } }