using System; using System.Xml.Serialization; using System.Collections.Generic; using System.IO; using NaGet.Packages; namespace ArchiveInstall { public class InstalledFileList { [XmlElement("Entry")] public List Entries; public InstalledFileList() { Entries = new List(); } /// /// ハッシュ検証を行い、変更されたと確認した(妥当でない)ファイルを返す /// /// 検査するファイルのルートディレクトリ /// 変更されたと検出したファイル() public IEnumerable Verify(string rootDirectory) { foreach (InstalledFile file in Entries) { if (! file.Hash.Validate(Path.Combine(rootDirectory, file.Path)) ) { yield return file; } } } public static InstalledFileList CreateFromFiles(string rootDirectory) { InstalledFileList list = new InstalledFileList(); foreach (string filepath in Directory.GetFiles(rootDirectory, "*", SearchOption.AllDirectories)) { string relativePath = NaGet.Utils.GetRelativePath(rootDirectory, filepath); if (relativePath.StartsWith(".applistation.")) { continue; } InstalledFile file = new InstalledFile(); file.Path = relativePath; file.Hash = new HashValue(); file.Hash.Type = HashValueType.SHA1SUM; file.Hash.Value = HashValue.HashValueFor(filepath, file.Hash.Type); list.Entries.Add(file); } return list; } } public class InstalledFile { /// /// ファイルのパス /// public string Path; /// /// ハッシュ値 /// public HashValue Hash; public InstalledFile() { } } }