public int Extract(string packageFile, string directory, bool suppressNestedScriptWarning) { var filesExtracted = 0; using (var packageStream = new FileStream(packageFile, FileMode.Open, FileAccess.Read)) using (var archive = ZipArchive.Open(packageStream)) { foreach (var entry in archive.Entries) { var unescapedKey = UnescapePath(entry.Key); if (IsExcludedPath(unescapedKey)) { continue; } var targetDirectory = Path.Combine(directory, Path.GetDirectoryName(unescapedKey)); if (!Directory.Exists(targetDirectory)) { Directory.CreateDirectory(targetDirectory); } if (entry.IsDirectory || !IsPackageFile(entry.Key)) { continue; } var targetFile = Path.Combine(targetDirectory, Path.GetFileName(unescapedKey)); entry.WriteToFile(targetFile, new ExtractionOptions { Overwrite = true, WriteSymbolicLink = WriteSymbolicLink }); SetFileLastModifiedTime(entry, targetFile); filesExtracted++; if (!suppressNestedScriptWarning) { GenericPackageExtractor.WarnIfScriptInSubFolder(unescapedKey); } } return(filesExtracted); } }
public int Extract(string packageFile, string directory, bool suppressNestedScriptWarning) { var filesExtracted = 0; using (var packageStream = new FileStream(packageFile, FileMode.Open, FileAccess.Read)) using (var reader = ZipReader.Open(packageStream)) { while (reader.MoveToNextEntry()) { var unescapedKey = UnescapePath(reader.Entry.Key); if (IsExcludedPath(unescapedKey)) { continue; } var targetDirectory = Path.Combine(directory, Path.GetDirectoryName(unescapedKey)); if (!Directory.Exists(targetDirectory)) { Directory.CreateDirectory(targetDirectory); } if (reader.Entry.IsDirectory || !IsPackageFile(reader.Entry.Key)) { continue; } var targetFile = Path.Combine(targetDirectory, Path.GetFileName(unescapedKey)); reader.WriteEntryToFile(targetFile, ExtractOptions.Overwrite); SetFileLastModifiedTime(reader.Entry, targetFile); filesExtracted++; if (!suppressNestedScriptWarning) { GenericPackageExtractor.WarnIfScriptInSubFolder(unescapedKey); } } return(filesExtracted); } }