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; }
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); } } } }
/// <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); }
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; }
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); }
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); }
/// <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()); }