/// <summary> /// Loads a Database from a XML file /// </summary> /// <param name="fileName">XML file name</param> /// <param name="basePath">Base path</param> /// <param name="pathType">Path type</param> /// <returns>New Database</returns> public static Database FromFile(string fileName, string basePath, PathType pathType) { // ensure file exists first if (!File.Exists(fileName)) { // otherwise, return a new empty Database return new Database(fileName); } // ready serializer XmlSerializerNamespaces serializerNameSpace = new XmlSerializerNamespaces(); serializerNameSpace.Add(String.Empty, String.Empty); XmlSerializer serializer = new XmlSerializer(typeof(DatabaseFile)); // load all elements from the XML DatabaseFile databaseFile = null; using (StreamReader reader = new StreamReader(fileName)) { try { databaseFile = (DatabaseFile)serializer.Deserialize(reader); } catch (XmlException) { // let callers handle error } catch (InvalidOperationException) { // let callers handle error } } if (databaseFile == null) { return null; } Database db = new Database() { XmlFileName = fileName }; // initialize all elements into the hash table foreach (FileChecksum fileChecksum in databaseFile.Files) { if (String.IsNullOrEmpty(fileChecksum.ResolvedFileName) || String.IsNullOrEmpty(fileChecksum.Checksum)) { // skip bad entries continue; } // FilePath fileChecksum.InitFromXml(basePath, pathType); // add to the database's lookup table db._fileLookup.Add(fileChecksum.ResolvedFileName, fileChecksum); } return db; }
/// <summary> /// Initializes a new instance of the <see cref="Engine" /> class /// </summary> /// <param name="xmlDatabasePath">XML database path</param> /// <param name="reporter">Reporter to use</param> /// <param name="basePath">Base path</param> /// <param name="excludePattern">Exclude pattern</param> /// <param name="matchPattern">Match pattern</param> /// <param name="matchType">Match type</param> /// <param name="pathType">Path type</param> /// <param name="checksumType">Checksum type</param> public Engine( string xmlDatabasePath, IEngineReporter reporter, string basePath, string excludePattern = "", string matchPattern = "*", MatchType matchType = MatchType.Wildcard, PathType pathType = PathType.RelativePath, ChecksumType checksumType = ChecksumType.MD5) { _xmlDatabasePath = xmlDatabasePath; _reporter = reporter; _basePath = basePath; _excludePattern = excludePattern; _matchPattern = matchPattern; _matchType = matchType; _pathType = pathType; _checksumType = checksumType; _db = Database.FromFile(_xmlDatabasePath, _basePath, _pathType); }