要监视文件或文件夹的改变,可使用 FileSystemWatcher


FileSystemWatcher fileWatcher = new FileSystemWatcher
{
    Path = watchingFolder,
    NotifyFilter = NotifyFilters.Size | NotifyFilters.LastWrite,
    Filter = "*.log",
    EnableRaisingEvents = true,
};
_fileWatcher.Changed += FileWatcher_Changed;
private void FileWatcher_Changed(object sender, FileSystemEventArgs e)
{
    if (e.ChangeType == WatcherChangeTypes.Changed)
    {
    }
}

需要注意的是,并不是按照以上这种写法就能立即收到改变通知。 有些程序写入文件是立即写入磁盘的(如记事本),在写入时能够通过以上方法立即获得通知; 但有一些不是立即写入磁盘(如 Log4Net),它会有一个缓冲区,程序写入到缓冲区时以上方法不会收到通知。

然而,只要有任何一个进程读取了这个文件(哪怕是只有一个字节),Windows 就会立刻将缓冲区写入磁盘,以上方法也就会收到改变通知了。


本文会经常更新,请阅读原文: https://walterlv.github.io/dotnet/2014/09/23/FileSystemWatcher-monitor-filesystem-changed.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系