Exemplo n.º 1
0
 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);
             }
         }
     }
 }
Exemplo n.º 2
0
        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);
        }