/// <inheritdoc /> public IDictionary<string, string> GetMultipleFileContentsFromPackageAsStrings( Package package, string searchPattern, Encoding encoding = null) { encoding = encoding ?? Encoding.UTF8; var dictionaryBytes = this.GetMultipleFileContentsFromPackageAsBytes(package, searchPattern); var dictionaryStrings = dictionaryBytes.ToDictionary(_ => _.Key, _ => encoding.GetString(_.Value)); return dictionaryStrings; }
/// <inheritdoc /> public IDictionary<string, byte[]> GetMultipleFileContentsFromPackageAsBytes( Package package, string searchPattern) { if (string.Equals(package.PackageDescription.Id, PackageDescription.NullPackageId, StringComparison.CurrentCultureIgnoreCase)) { return new Dictionary<string, byte[]>(); } // download package (decompressed) var workingDirectory = Path.Combine( this.defaultWorkingDirectory, "PackageFileContentsSearch-" + DateTime.Now.ToString(DirectoryDateTimeToStringFormat)); var packageFilePath = Path.Combine(workingDirectory, "Package.zip"); Directory.CreateDirectory(workingDirectory); File.WriteAllBytes(packageFilePath, package.PackageFileBytes); ZipFile.ExtractToDirectory(packageFilePath, Directory.GetParent(packageFilePath).FullName); // get list of files as fullpath strings var files = Directory.GetFiles(workingDirectory, "*", SearchOption.AllDirectories); // normalize slashes in searchPattern AND in file list var normalizedSlashesSearchPattern = searchPattern.Replace(@"\", "/"); var normalizedSlashesFiles = files.Select(_ => _.Replace(@"\", "/")); var filesToGetContentsFor = normalizedSlashesFiles.Where( _ => CultureInfo.CurrentCulture.CompareInfo.IndexOf( _, normalizedSlashesSearchPattern, CompareOptions.IgnoreCase) >= 0); var ret = filesToGetContentsFor.ToDictionary(_ => _, File.ReadAllBytes); // clean up temp files Directory.Delete(workingDirectory, true); return ret; }
/// <inheritdoc /> public Package GetPackage(PackageDescription packageDescription) { var ret = new Package { PackageDescription = packageDescription, PackageFileBytes = this.GetPackageFile(packageDescription), PackageFileBytesRetrievalDateTimeUtc = DateTime.UtcNow, }; return ret; }