Пример #1
0
        static void Main(string[] args)
        {
            Console.Write("Volumes for Scan (eg: C: D: E:): ");
            List <string> volumes = Console.ReadLine().ToUpper().Split(new char[] { ' ' }).ToList();

            MyEverythingDB db = new MyEverythingDB();

            // ----------------遍历 mft,找到指定 volume 上的所有文件和文件夹----------------
            Console.WriteLine("Note: If this is your first time run, it will take some time to open the NTFS Journal System.");
            var enumFilesTimeStart = DateTime.Now;

            foreach (string volume in volumes)
            {
                List <MyEverythingRecord> files;
                List <MyEverythingRecord> folders;
                Console.WriteLine("Scanning {0}...", volume);
                EnumerateVolume(volume, out files, out folders);

                db.AddRecord(volume, files, MyEverythingRecordType.File);
                db.AddRecord(volume, folders, MyEverythingRecordType.Folder);
            }
            Console.WriteLine("{0}s file and {1} folder indexed, {2}ms has spent.",
                              db.FileCount, db.FolderCount, DateTime.Now.Subtract(enumFilesTimeStart).TotalMilliseconds);
            // -----------------------------------------------------------------------------



            // ---------------------------命令模式------------------------------
            Console.WriteLine("\nMyEverything version 0.0.1");
            Console.WriteLine("Type ? for help.");
            while (true)
            {
                Console.Write("MyEverything> ");
                string[] cmd = Console.ReadLine().Split(' ');
                long     fileFoundCnt;
                long     folderFoundCnt;
                List <MyEverythingRecord> found;

                switch (cmd[0].ToLower())
                {
                case "s":
                    if (!string.IsNullOrEmpty(cmd[1]))
                    {
                        var searchtimestart = DateTime.Now;
                        found = db.FindByName(cmd[1], out fileFoundCnt, out folderFoundCnt);
                        found.ForEach(x => FillPath(x.VolumeName, x, db));
                        var searchtimeend = DateTime.Now;
                        if (cmd.Length == 3 && !string.IsNullOrEmpty(cmd[2]))
                        {
                            using (StreamWriter sw = new StreamWriter(cmd[2], false)) {
                                found.ForEach(x => sw.WriteLine(string.IsNullOrEmpty(x.FullPath) ? x.Name : x.FullPath));
                            }
                            Console.WriteLine("{0} has written.", cmd[2]);
                        }
                        else
                        {
                            found.ForEach(x => Console.WriteLine(string.IsNullOrEmpty(x.FullPath) ? x.Name : x.FullPath));
                        }
                        Console.WriteLine("{0}s file and {1}s folder matched, {2}ms has spent.",
                                          fileFoundCnt, folderFoundCnt, searchtimeend.Subtract(searchtimestart).TotalMilliseconds);
                    }
                    break;

                case "?":
                    Console.WriteLine("s filename [logfile]\tSearch files and folders, \n\t\t\tif logfile specified, the result \n\t\t\twill be written to the logfile, \n\t\t\teg: s .txt");
                    Console.WriteLine("mo volume [debug]\tMonitor the volume, eg: mo E: debug\n\t\t\tIf debug param is specified, some debug msg\n\t\t\twill be print to screen.\n\t\t\tNote: multiple volume monitor is not stable now.");
                    Console.WriteLine("x\t\t\tExit this app.");
                    break;

                case "x":
                    Environment.Exit(0);
                    break;

                case "mo":
                    bool          pridebug = (cmd.Length == 3) && (cmd[2] == "debug");
                    VolumeMonitor monitor  = new VolumeMonitor();
                    monitor.RecordAddedEvent += delegate(MyEverythingRecord record) {
                        if (pridebug)
                        {
                            Console.WriteLine(">>>> New file {0} added.", record.FullPath);
                        }
                    };
                    monitor.RecordDeletedEvent += delegate(MyEverythingRecord record) {
                        if (pridebug)
                        {
                            Console.WriteLine(">>>> File {0} deleted.", record.FullPath);
                        }
                    };
                    monitor.RecordRenameEvent += delegate(MyEverythingRecord oldRecord, MyEverythingRecord newRecord) {
                        if (pridebug)
                        {
                            Console.WriteLine(">>>> File {0} renamed to {1}.", oldRecord.FullPath, newRecord.FullPath);
                        }
                    };
                    monitor.Monitor(cmd[1].ToUpper().Split(' ').ToList(), db);
                    Console.WriteLine("Moniting on {0}......", cmd[1].ToUpper());
                    break;
                }
            }
        }
Пример #2
0
        static void Main(string[] args)
        {
            Console.Write("Volumes for Scan (eg: C: D: E:): ");
            List<string> volumes = Console.ReadLine().ToUpper().Split(new char[] {' '}).ToList();

            MyEverythingDB db = new MyEverythingDB();

            // ----------------遍历 mft,找到指定 volume 上的所有文件和文件夹----------------
            Console.WriteLine("Note: If this is your first time run, it will take some time to open the NTFS Journal System.");
            var enumFilesTimeStart = DateTime.Now;
            foreach (string volume in volumes) {
                List<MyEverythingRecord> files;
                List<MyEverythingRecord> folders;
                Console.WriteLine("Scanning {0}...", volume);
                EnumerateVolume(volume, out files, out folders);

                db.AddRecord(volume, files, MyEverythingRecordType.File);
                db.AddRecord(volume, folders, MyEverythingRecordType.Folder);

            }
            Console.WriteLine("{0}s file and {1} folder indexed, {2}ms has spent.",
                db.FileCount, db.FolderCount, DateTime.Now.Subtract(enumFilesTimeStart).TotalMilliseconds);
            // -----------------------------------------------------------------------------

            // ---------------------------命令模式------------------------------
            Console.WriteLine("\nMyEverything version 0.0.1");
            Console.WriteLine("Type ? for help.");
            while (true) {
                Console.Write("MyEverything> ");
                string[] cmd = Console.ReadLine().Split(' ');
                long fileFoundCnt;
                long folderFoundCnt;
                List<MyEverythingRecord> found;

                switch (cmd[0].ToLower()) {
                    case "s":
                        if (!string.IsNullOrEmpty(cmd[1])) {
                            var searchtimestart = DateTime.Now;
                            found = db.FindByName(cmd[1], out fileFoundCnt, out folderFoundCnt);
                            found.ForEach(x => FillPath(x.VolumeName, x, db));
                            var searchtimeend = DateTime.Now;
                            if (cmd.Length == 3 && !string.IsNullOrEmpty(cmd[2])) {
                                using (StreamWriter sw = new StreamWriter(cmd[2], false)) {
                                    found.ForEach(x => sw.WriteLine(string.IsNullOrEmpty(x.FullPath) ? x.Name : x.FullPath));
                                }
                                Console.WriteLine("{0} has written.", cmd[2]);
                            } else {
                                found.ForEach(x => Console.WriteLine(string.IsNullOrEmpty(x.FullPath) ? x.Name : x.FullPath));
                            }
                            Console.WriteLine("{0}s file and {1}s folder matched, {2}ms has spent.",
                                fileFoundCnt, folderFoundCnt, searchtimeend.Subtract(searchtimestart).TotalMilliseconds);
                        }
                        break;
                    case "?":
                        Console.WriteLine("s filename [logfile]\tSearch files and folders, \n\t\t\tif logfile specified, the result \n\t\t\twill be written to the logfile, \n\t\t\teg: s .txt");
                        Console.WriteLine("mo volume [debug]\tMonitor the volume, eg: mo E: debug\n\t\t\tIf debug param is specified, some debug msg\n\t\t\twill be print to screen.\n\t\t\tNote: multiple volume monitor is not stable now.");
                        Console.WriteLine("x\t\t\tExit this app.");
                        break;
                    case "x":
                        Environment.Exit(0);
                        break;
                    case "mo":
                        bool pridebug = (cmd.Length == 3) && (cmd[2] == "debug");
                        VolumeMonitor monitor = new VolumeMonitor();
                        monitor.RecordAddedEvent += delegate(MyEverythingRecord record) {
                            if (pridebug) Console.WriteLine(">>>> New file {0} added.", record.FullPath);
                        };
                        monitor.RecordDeletedEvent += delegate(MyEverythingRecord record) {
                            if (pridebug) Console.WriteLine(">>>> File {0} deleted.", record.FullPath);
                        };
                        monitor.RecordRenameEvent += delegate(MyEverythingRecord oldRecord, MyEverythingRecord newRecord) {
                            if (pridebug) Console.WriteLine(">>>> File {0} renamed to {1}.", oldRecord.FullPath, newRecord.FullPath);
                        };
                        monitor.Monitor(cmd[1].ToUpper().Split(' ').ToList(), db);
                        Console.WriteLine("Moniting on {0}......", cmd[1].ToUpper());
                        break;
                }
            }
        }