/// <summary> /// Scans the NTFS Master File Table entries for a matching file. /// </summary> /// <param name="drive">The partition to scan.</param> /// <param name="paths">The paths to which the search should be limited.</param> private void ScanNtfsMftForFile(DriveInfo drive, IEnumerable<string> paths = null) { FileSearchProgressChanged.Fire(this, "Reading the MFT records of the " + drive.Name[0] + " partition..."); IEnumerable<string> list; Log.Debug("Reading the MFT records of the " + drive.Name[0] + " partition..."); try { _cts.Token.ThrowIfCancellationRequested(); var usn = new NtfsUsnJournal(drive); _cts.Token.ThrowIfCancellationRequested(); list = usn.GetParsedPaths(ShowNames.Regexes.KnownVideo, paths); _cts.Token.ThrowIfCancellationRequested(); } catch (OperationCanceledException) { throw; } catch (Exception ex) { Log.Error("Error while reading the MFT records of the " + drive.Name[0] + " partition.", ex); return; } FileSearchProgressChanged.Fire(this, "Searching for matching files in the " + drive.Name[0] + " partition..."); foreach (var file in list) { _cts.Token.ThrowIfCancellationRequested(); try { if (_checkFile(file)) { _files.Add(file); } } catch (PathTooLongException) { } catch (SecurityException) { } catch (UnauthorizedAccessException) { } catch (DirectoryNotFoundException) { } catch (Exception ex) { Log.Error("Error while checking file.", ex); } } }
/// <summary> /// Scans the NTFS Master File Table entries for a matching file. /// </summary> /// <param name="drive">The partition to scan.</param> /// <param name="paths">The paths to which the search should be limited.</param> private void ScanNtfsMftForFile(DriveInfo drive, IEnumerable<string> paths = null) { FileSearchProgressChanged.Fire(this, "Reading the MFT records of the " + drive.Name[0] + " partition..."); var usn = new NtfsUsnJournal(drive); var list = usn.GetParsedPaths(ShowNames.Regexes.KnownVideo, paths); FileSearchProgressChanged.Fire(this, "Searching for matching files in the " + drive.Name[0] + " partition..."); foreach (var file in list) { try { if (CheckFile(file)) { _files.Add(file); } } catch (PathTooLongException) { } catch (SecurityException) { } catch (UnauthorizedAccessException) { } catch (DirectoryNotFoundException) { } catch (Exception ex) { MainWindow.HandleUnexpectedException(ex); } } }