/// <summary> /// Extract the contents of a zip file. /// </summary> /// <param name="zipFileName">The zip file to extract from.</param> /// <param name="targetDirectory">The directory to save extracted information in.</param> /// <param name="overwrite">The style of <see cref="Overwrite">overwriting</see> to apply.</param> /// <param name="confirmDelegate">A delegate to invoke when confirming overwriting.</param> /// <param name="fileFilter">A filter to apply to files.</param> /// <param name="directoryFilter">A filter to apply to directories.</param> /// <param name="restoreDateTime">Flag indicating wether to restore the date and time for extracted files.</param> public void ExtractZip(string zipFileName, string targetDirectory, Overwrite overwrite, ConfirmOverwriteDelegate confirmDelegate, string fileFilter, string directoryFilter, bool restoreDateTime) { if ( (overwrite == Overwrite.Prompt) && (confirmDelegate == null) ) { throw new ArgumentNullException("confirmDelegate"); } continueRunning_ = true; overwrite_ = overwrite; confirmDelegate_ = confirmDelegate; targetDirectory_ = targetDirectory; fileFilter_ = new NameFilter(fileFilter); directoryFilter_ = new NameFilter(directoryFilter); restoreDateTimeOnExtract_ = restoreDateTime; using ( inputStream_ = new ZipInputStream(File.OpenRead(zipFileName)) ) { if (password_ != null) { inputStream_.Password = password_; } ZipEntry entry; while ( continueRunning_ && (entry = inputStream_.GetNextEntry()) != null ) { if ( directoryFilter_.IsMatch(Path.GetDirectoryName(entry.Name)) && fileFilter_.IsMatch(entry.Name) ) { ExtractEntry(entry); } } } }
public static MemoryStream UnzipToMemoryStream(string binfile) { var stream = new MemoryStream(); var count = 0x100000; using (var stream2 = File.OpenRead(binfile)) { using (ZipInputStream stream3 = new ZipInputStream(stream2)) { while (stream3.GetNextEntry() != null) { var buffer = new byte[count]; while (true) { count = stream3.Read(buffer, 0, buffer.Length); if (count > 0) { stream.Write(buffer, 0, count); } else { break; } } } } } return stream; }