9、.Net Core监听Linux下文件夹变化
.Net Core提供了一个很强大的文件处理,并封装关于文件新增、修改、重命名、删除的事件监听。
官方示例代码:FileSystemWatcher 类
核心代码:
using (FileSystemWatcher watcher = new FileSystemWatcher())
{
watcher.Path = args[1];
// Watch for changes in LastAccess and LastWrite times, and
// the renaming of files or directories.
watcher.NotifyFilter = NotifyFilters.LastAccess
| NotifyFilters.LastWrite
| NotifyFilters.FileName
| NotifyFilters.DirectoryName;
// Only watch text files.
watcher.Filter = "*.txt";
// Add event handlers.
watcher.Changed += OnChanged;
watcher.Created += OnCreated;
watcher.Deleted += OnChanged;
watcher.Renamed += OnRenamed;
// Begin watching.
watcher.EnableRaisingEvents = true;
// Wait for the user to quit the program.
Console.WriteLine("Press 'q' to quit the sample.");
while (Console.Read() != 'q') ;
}
知识点:
1、FileSystemWatcher可以监视指定目录的文件和子目录中的更改。你可以创建一个组件来监视本地计算机、网络驱动器或远程计算机上的文件。
2、若要监视所有文件中的更改,请将Filter属性设置为空字符串 ( "" ) 或使用通配符 ( "* * "。) 。
3、若要查看特定文件,请将Filter属性设置为文件名。例如,若要监视文件 MyDoc.txt 中的更改,请将Filter属性设置为 "MyDoc.txt"。还可以监视特定类型的文件中的更改。例如,若要监视文本文件中的更改,请将Filter属性设置为 " * .txt"(官方示例即监听*.txt)。
4、可以在目录或文件中监视几种类型的更改。例如,你可以监听文件的属性(如:日期、时间,Size文件或目录等)。这是通过将属性设置NotifyFilter为值之一来完成的NotifyFilters。有关可以观看的更改类型的详细信息,请参阅NotifyFilters。
5、可以监视文件或目录的重命名、删除或创建。例如,若要监视是否重命名了文本文件,请将Filter属性设置为 "* .txt" 并WaitForChanged使用Renamed为其参数指定的指定方法。
6、Windows 操作系统会将文件更改的组件通知到由创建的缓冲区FileSystemWatcher。如果短时间内有很多更改,则缓冲区可能溢出。若要避免缓冲区溢出,请使用NotifyFilter和IncludeSubdirectories属性,以便可以筛选出不需要的更改通知。
7、有关实例的初始属性值的列表FileSystemWatcher,请参见FileSystemWatcher构造函数。
8、不会忽略隐藏的文件。
9、SecurityException 当直接调用方或派生类不具有完全信任权限时,将引发。有关安全要求的详细信息,请参阅链接需求。
10、可为通过网络监视目录的属性设置的最大大小InternalBufferSize为 64 KB。