Пример #1
0
        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);
                }
        }
Пример #2
0
        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);
                }
        }