gpt4 book ai didi

c# - 哪个 NotifyFilter 触发了 FileSystemWatcher.Changed?

转载 作者:行者123 更新时间:2023-11-30 23:14:31 29 4
gpt4 key购买 nike

在创建 FileSystemWatcher 时,我们可以选择要监视的 NotifyFilters。然而,据我了解,有多个 NotifyFilters 可以触发 FileSystemWatcher.Changed 事件,例如 NotifyFilters.LastWriteNotifyFilters。属性

代码:

FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = Path.GetDirectoryName(PATH);
watcher.Filter = Path.GetFileName(PATH);
watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size | NotifyFilters.FileName | NotifyFilters.Security |
NotifyFilters.CreationTime | NotifyFilters.Attributes | NotifyFilters.LastAccess | NotifyFilters.DirectoryName;
watcher.Changed += OnFileSystemWatcher_Changed;
watcher.Deleted += OnFileSystemWatcher_Deleted;
watcher.Created += OnFileSystemWatcher_Created;
watcher.Renamed += OnFileSystemWatcher_Renamed;

private void OnFileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
{
// Do Stuff
}

问题:在我的 FileSystemWatcher.Changed 事件处理程序中,有没有办法确定哪个 NotifyFilter 引发了该事件?

尝试:我正在考虑为每种类型的 NotifyFilter 创建一个新的 FileSystemWatcher,但这看起来不太像有效使用内存。我希望有一个更清洁的方法。

最佳答案

不,没有办法找到它,因为 FileSystemWatcher 调用的底层 windows api 不提供此类信息。调用的api是ReadDirectoryChangesW并在 FILE_NOTIFY_INFORMATION 中返回结果具有以下字段的结构:

typedef struct _FILE_NOTIFY_INFORMATION {
DWORD NextEntryOffset;
DWORD Action;
DWORD FileNameLength;
WCHAR FileName[1];
} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;

创建\修改\删除\重命名操作的位置。如您所见 - 没有关于触发更改的过滤器的信息。

关于c# - 哪个 NotifyFilter 触发了 FileSystemWatcher.Changed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43009295/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com