private void WriteChange(FileSystemEventArgs objIn, NotifyFilters filters) { if (objIn != null) { if (IsInvalidFile(objIn.FullPath)) { return; } // If we are gathering extended details LastAccess times aren't meaningful since we // will trigger them Instead we note they are gathered and clean up in StopRun if (!options.FileNamesOnly && filters.HasFlag(NotifyFilters.LastAccess)) { filesAccessed.TryAdd(objIn.FullPath, objIn); } else { // We skip gathering extended information when The File was Deleted We are set // to gather names only var fso = (objIn.ChangeType == WatcherChangeTypes.Deleted || options.FileNamesOnly) ? null : fsc.FilePathToFileSystemObject(objIn.FullPath); var ToWrite = new FileMonitorObject(objIn.FullPath) { ResultType = RESULT_TYPE.FILEMONITOR, ChangeType = ChangeTypeStringToChangeType(objIn.ChangeType.ToString()), Name = objIn.Name, Timestamp = DateTime.Now.ToString("O", CultureInfo.InvariantCulture), FileSystemObject = fso, NotifyFilters = filters }; changeHandler(ToWrite); } } }
/// <summary> /// By default existing files and directories will be added. You can change this behaviour by overriding this method. /// This depends on the use of <see cref="NotifyFilters"/> though. /// /// If you need, you can recognize the manual files added as they'll be of type <see cref="ManualFileSystemEventArgs"/>. /// </summary> protected virtual void AddManualFileSystemEventArgs(DirectoryInfo path, string filter, bool includeSubDirectories, NotifyFilters notifyFilters, Action <ManualFileSystemEventArgs> adder) { if (path == null) { throw new ArgumentNullException(nameof(path)); } if (adder == null) { throw new ArgumentNullException(nameof(adder)); } foreach ( FileSystemInfo info in path.EnumerateFileSystemInfos(filter, includeSubDirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly)) { bool isDirectory = info.Attributes.HasFlag(FileAttributes.Directory); bool monitorDirectoryName = notifyFilters.HasFlag(NotifyFilters.DirectoryName); if (isDirectory) { if (!monitorDirectoryName) { continue; } } else { bool monitorFileName = notifyFilters.HasFlag(NotifyFilters.FileName); if (!monitorFileName) { continue; } } adder(new ManualFileSystemEventArgs( WatcherChangeTypes.Created, Path.GetDirectoryName(info.FullName) ?? info.FullName, info.Name)); } }
private void AddCasesForSingleFilter([NotNull] TestCasesBuilder builder) { int bitmask = 1; NotifyFilters filters = GetUnionForFilters(); while (filters != 0) { var currentFilter = (NotifyFilters)bitmask; if (filters.HasFlag(currentFilter)) { builder.Add(currentFilter, GetExpectedTextForFilters(currentFilter)); filters &= ~currentFilter; } bitmask = bitmask << 1; } }