public void Merge(DCDictionary dcDictionary) { foreach (var kvp in dcDictionary) { if (this.ContainsKey(kvp.Key)) { foreach (var path in kvp.Value) { if (!this[kvp.Key].Contains(path)) { this[kvp.Key].AddLast(path); } } } else { this[kvp.Key] = new LinkedList <string>(); foreach (var path in kvp.Value) { this[kvp.Key].AddLast(path); } } } }
public static int Main(string[] args) { DirDictionary = new DCDictionary(); AliasMapping = new DCAliasMapping(); var assmblyPath = Directory.GetParent(System.Reflection.Assembly.GetExecutingAssembly().Location).FullName; var aliasFilePath = Path.Combine(assmblyPath, "alias.map"); if (File.Exists(aliasFilePath)) { using (FileStream fileStream = new FileStream(aliasFilePath, FileMode.Open)) { AliasMapping.Deserialize(fileStream); } Console.WriteLine("Loading the alias mapping ..."); foreach (var kvp in AliasMapping) { Console.WriteLine(kvp.Key + " = " + kvp.Value); } Console.WriteLine("{0} Items has alias.", AliasMapping.Count()); } if (args.Length > 0 && args[0] == "alias") { Console.WriteLine("Alias mapping format: [key=value]: "); while (true) { var line = Console.ReadLine(); if (!string.IsNullOrEmpty(line)) { var tokens = line.Split(new char[] { '=' }); if (tokens.Length != 2) { Console.WriteLine("Invalid input!" + line); } else { if (AliasMapping.ContainsKey(tokens[0].ToLower())) { Console.WriteLine("Duplicate alias! [{0} = {1}]", tokens[0].ToLower(), AliasMapping[tokens[0].ToLower()]); } else { AliasMapping[tokens[0].ToLower()] = tokens[1].ToLower(); } } } else { break; } } FileStream dcAlias = null; if (!File.Exists(aliasFilePath)) { dcAlias = new FileStream(aliasFilePath, FileMode.Create); } else { dcAlias = new FileStream(aliasFilePath, FileMode.Open); } AliasMapping.Serialize(dcAlias); dcAlias.Close(); return(0); } var dcFiles = new DirectoryInfo(assmblyPath).GetFiles("*.data", SearchOption.TopDirectoryOnly); foreach (var dcFile in dcFiles) { Console.WriteLine("Loading dc file:" + dcFile.FullName); Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); using (FileStream fileStream = new FileStream(dcFile.FullName, FileMode.Open)) { DirDictionary.Deserialize(fileStream); } stopWatch.Stop(); TimeSpan ts = stopWatch.Elapsed; Console.WriteLine("Elapsed:" + ts.TotalMilliseconds / 1000); } if (args.Length > 0 && args[0] == "build") { for (int i = 1; i < args.Length; i++) { if (Directory.Exists(args[i])) { var dirDictionary = new DCDictionary(); var dirToIndex = args[i]; string folderName = new DirectoryInfo(dirToIndex).Name; string dcDataPath = Path.Combine(assmblyPath, folderName + ".data"); FileStream dcData = null; if (!File.Exists(dcDataPath)) { dcData = new FileStream(dcDataPath, FileMode.Create); } else { dcData = new FileStream(dcDataPath, FileMode.Open); } var dirInfo = new DirectoryInfo(dirToIndex); Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); Console.WriteLine("Started to build index for the folder: " + dirToIndex); try { var dirs = dirInfo.EnumerateDirectories("*", SearchOption.AllDirectories); dirDictionary.Add(dirInfo); foreach (var dir in dirs) { dirDictionary.Add(dir); } } catch (UnauthorizedAccessException ex) { } dirDictionary.Serialize(dcData); DirDictionary.Merge(dirDictionary); dcData.Close(); stopWatch.Stop(); dirDictionary.Dispose(); TimeSpan ts = stopWatch.Elapsed; Console.WriteLine("Elapsed:" + ts.TotalMilliseconds / 1000); } } return(0); } Thread thread = new Thread(StartListening); thread.Start(11001); init = true; return(0); }