Пример #1
0
 private void BTCreateUSN_Click(object sender, EventArgs e)
 {
     using (UsnOperator uo = new UsnOperator((DriveInfo)CBDrives.SelectedItem))
     {
         uo.CreateUsnJournal();
     }
 }
Пример #2
0
        public static void GetAllFilesAndDirectories(string constring, string DBpath)
        {
            List <FileAndDirectoryEntry> result = new List <FileAndDirectoryEntry>();

            IEnumerable <DriveInfo> fixedNtfsDrives = GetAllFixedNtfsDrives();

            foreach (var drive in fixedNtfsDrives)
            {
                var usnOperator          = new UsnOperator(drive);
                var usnEntries           = usnOperator.GetEntries().Where(e => !excludeFolders.Contains(e.FileName.ToUpper()));
                var folders              = usnEntries.Where(e => e.IsFolder).ToArray();
                List <FrnFilePath> paths = GetFolderPath(folders, drive);

                result.AddRange(usnEntries.Join(
                                    paths,
                                    usn => usn.ParentFileReferenceNumber,
                                    path => path.FileReferenceNumber,
                                    (usn, path) => new FileAndDirectoryEntry(usn, path.Path)));
                paths.Clear();
            }
            SQLiteConnection connection = new SQLiteConnection("Data Source = " + DBpath);

            connection.Open();
            SQLiteCommand command = new SQLiteCommand(connection);

            command.CommandText = "PRAGMA synchronous = OFF";
            command.ExecuteNonQuery();
            using (SQLiteTransaction mytransaction = connection.BeginTransaction())
            {
                using (SQLiteCommand mycommand = new SQLiteCommand(connection))
                {
                    SQLiteParameter[] myparam = new SQLiteParameter[3];
                    myparam[0] = new SQLiteParameter();
                    myparam[1] = new SQLiteParameter();
                    myparam[2] = new SQLiteParameter();
                    int n;

                    mycommand.CommandText = "INSERT INTO [FileTable] ([FileName],[FullFileName],[isFolder]) VALUES(?,?,?)";
                    mycommand.Parameters.AddRange(myparam);

                    for (n = 0; n < result.Count; n++)
                    {
                        myparam[0].Value = result[n].FileName;
                        myparam[1].Value = result[n].FullFileName;
                        myparam[2].Value = result[n].IsFolder;
                        mycommand.ExecuteNonQuery();
                    }
                }
                mytransaction.Commit();
            }
            result.Clear();
            GC.Collect();
            GC.WaitForPendingFinalizers();
            connection.Close();
            //MessageBox.Show("搜索功能初始化完成。");
            QuickForm.FinishInitSearch = true;
            return;
        }
Пример #3
0
        private void GetFileToDatabase()
        {
            var drives = FileQueryEngine.GetReadyNtfsDrives().OrderBy(x => x.Name);

            if (ListTool.HasElements(drives))
            {
                foreach (var drive in drives)
                {
                    NewFileCount = 0;
                    //if (!drive.Name.Contains("J")) continue;//测试只读取D盘
                    //if (drive.Name.Contains("D")) continue;//测试时跳过D盘
                    //if (drive.Name.Contains("F")) continue;//测试时跳过F盘

                    using (var db = new Muse())
                    {
                        //检测磁盘是否格式化,如果格式化则清空USN记录
                        DateTime dt1 = DriveTool.GetLastFormatTime(drive.Name);
                        var      ds  = db.Get <UsnDrives>(x => x.Name == drive.Name, null);
                        if ((ds == null) || (ds != null && ds.LastFormatTime != dt1.ToString()))
                        {
                            var deleteSql = db.Context.Database.ExecuteSqlCommand("DELETE FROM usnfiles WHERE drive = @p0;", drive.Name);

                            if (ds == null)
                            {
                                db.Add(new UsnDrives()
                                {
                                    Name = drive.Name, LastFormatTime = dt1.ToString()
                                });
                            }
                            else
                            {
                                ds.LastFormatTime = dt1.ToString();
                                db.Update(ds, true);
                            }
                        }

                        //查询上次读取到的位置(最后一条记录)
                        ulong filenumber = 0;
                        long  usn        = 0;
                        if (db.Any <UsnFiles>(x => x.Drive == drive.Name, null))
                        {
                            int      lastId  = db.Do <UsnFiles>().Where(x => x.Drive == drive.Name).Max(x => x.Id);
                            UsnFiles lastRec = db.Get <UsnFiles>(x => x.Id == lastId, null);

                            usn        = lastRec.Usn;
                            filenumber = NumberStringTool.ToUlong(lastRec.Number);

                            //usn = db.Do<UsnFiles>().Where(x => x.Drive == drive.Name).Max(x => x.Usn);
                            //string filenumberstr = db.Do<UsnFiles>().Where(x => x.Drive == drive.Name).Max(x => x.Number);
                            //filenumber = NumberStringTool.ToUlong(filenumberstr);
                        }
                        //从上次FileNumber记录开始读取
                        var usnOperator = new UsnOperator(drive);
                        usnOperator.GetEntries(usn, filenumber, GetFileToDatabaseEvent, 1000);
                    }
                }
            }
        }
Пример #4
0
        public static bool FileIsExist(string drive, long usn)
        {
            var d = DriveInfo.GetDrives().FirstOrDefault(x => x.Name == drive);

            if (d != null)
            {
                var usnOperator = new UsnOperator(d);
                return(usnOperator.UsnIsExist(usn));
            }
            return(false);
        }
Пример #5
0
        /// <summary>
        /// 查询磁盘的所有文件
        /// </summary>
        /// <param name="drive"></param>
        /// <returns></returns>
        public static List <FileAndDirectoryEntry> GetAllFileEntrys(DriveInfo drive)
        {
            List <FileAndDirectoryEntry> result = new List <FileAndDirectoryEntry>();
            var usnOperator          = new UsnOperator(drive);
            var usnEntries           = usnOperator.GetEntries().Where(e => !excludeFolders.Contains(e.FileName.ToUpper()));
            var folders              = usnEntries.Where(e => e.IsFolder).ToArray();
            List <FrnFilePath> paths = GetFolderPath(folders, drive);
            var range = usnEntries.Join(
                paths,
                usn => usn.ParentFileReferenceNumber,
                path => path.FileReferenceNumber,
                (usn, path) => new FileAndDirectoryEntry(usn, path.Path));

            result.AddRange(range);
            return(result);
        }
Пример #6
0
        private void BTFind_Click(object sender, EventArgs e)
        {
            BTFind.Enabled = false;
            //获取上次Usn
            long.TryParse(TBLastUsn.Text, out LastUsn);
            //获取上次FileRefNumber
            ulong.TryParse(TBLastFrn.Text, out LastFrn);

            if (CBDrives.SelectedItem != null)
            {
                using (UsnOperator uo = new UsnOperator((DriveInfo)CBDrives.SelectedItem))
                {
                    uo.GetEntries(LastUsn, LastFrn, ShowEntries, 3);
                }
            }
            BTFind.Enabled = true;
        }
Пример #7
0
        public static List <FileAndDirectoryEntry> GetAllFilesAndDirectories()
        {
            List <FileAndDirectoryEntry> result = new List <FileAndDirectoryEntry>();

            IEnumerable <DriveInfo> fixedNtfsDrives = GetAllFixedNtfsDrives();

            while (true)
            {
                foreach (var drive in fixedNtfsDrives)
                {
                    var usnOperator = new UsnOperator(drive);

                    var usnEntries = usnOperator.GetEntries().Where(e => !excludeFolders.Contains(e.FileName.ToUpper()));

                    var folders = usnEntries.Where(e => e.IsFolder).ToArray();
                    List <FrnFilePath> paths = GetFolderPath(folders, drive);

                    result.AddRange(usnEntries.Join(
                                        paths,
                                        usn => usn.ParentFileReferenceNumber,
                                        path => path.FileReferenceNumber,
                                        (usn, path) => new FileAndDirectoryEntry(usn, path.Path)));
                }
            }

            //Console.WriteLine(result.Count);
            //Console.WriteLine("==========");
            //for (int i = 0; i < result.Count; i++)
            //{
            //    Console.WriteLine((i) + "、" + result[i].FileName);
            //}
            //for (int i = 0; i < 10; i++)
            //{
            //    Console.WriteLine((i) + "、" + result[i].FileName);
            //}
            //Console.WriteLine("==========");
            //for (int i = 10; i > 0; i--)
            //{
            //    Console.WriteLine((result.Count - i) + "、" + result[result.Count - i].FileName);
            //}
            return(result);
        }
Пример #8
0
        public static List <FileAndDirectoryEntry> GetAllFilesAndDirectoriesAsync(bool showHidden = false, bool showSys = false)
        {
            List <FileAndDirectoryEntry> result = new List <FileAndDirectoryEntry>();

            IEnumerable <DriveInfo> fixedNtfsDrives = GetAllFixedNtfsDrives();

            Parallel.ForEach(fixedNtfsDrives, drive =>
            {
                var usnOperator = new UsnOperator(drive);

                var usnEntries = usnOperator.GetEntries().Where(e => !excludeFolders.Contains(e.FileName.ToUpper()));

                var folders = usnEntries.Where(e => e.IsFolder).ToArray();
                List <FrnFilePath> paths = GetFolderPath(folders, drive);

                result.AddRange(usnEntries.Join(
                                    paths,
                                    usn => usn.ParentFileReferenceNumber,
                                    path => path.FileReferenceNumber,
                                    (usn, path) => new FileAndDirectoryEntry(usn, path.Path)));
            });
            return(result);
        }
Пример #9
0
        /// <summary>
        /// 查询磁盘的所有文件
        /// </summary>
        /// <param name="drive"></param>
        /// <returns></returns>
        public static List <UsnEntry> GetAllFiles(DriveInfo drive)
        {
            var usnOperator = new UsnOperator(drive);

            return(usnOperator.GetEntries().Where(e => !excludeFolders.Contains(e.FileName.ToUpper())).ToList());
        }