关于.net:如何使用-C-中的-FileSystemWatcher

13次阅读

共计 2663 个字符,预计需要花费 7 分钟才能阅读完成。

开局一张图,在 System.IO 下的 FileSystemWatcher 罕用于监督文件系统的变更,当文件系统中的文件或者文件夹被批改会主动触发相应的回调事件。

为了可能理解 FileSystemWatcher 是怎么运作的,你能够指定一个被监督的文件夹,当被监督的文件夹批改后,大略会触发如下的一些事件。

  • Changed: 当文件或者文件夹曾经实现批改时触发此事件
  • Created:当文件或者文件夹曾经胜利创立触发此事件
  • Deleted:当文件或者文件夹曾经胜利删除触发此事件
  • Error:当变更的过程中产生谬误触发此事件。
  • Renamed:当文件或者文件夹曾经胜利被重命名时触发此事件

创立一个简略的 file 监督

接下来咱们在 Visual Studio 中创立一个 Console 程序,用来理解如何进行文件监督,不过倡议把 Console 部署成 Windows Service,这样不便在零碎中常驻监控,一旦被监督的门路产生变更就会主动发出通知事件。

该说的都说了,接下来一起钻研代码吧。


        static void Main(string[] args)
        {
            string path = @"D:\IDG";

            MonitorDirectory(path);

            Console.ReadKey();}

上面的代码片段展现了 MonitorDirectory 办法的外部逻辑,这个办法可用于监督指定的文件夹并且当文件夹变更时触发事件,能够看到 文件夹门路 是通过参数传进去的。


        private static void MonitorDirectory(string path)
        {FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();

            fileSystemWatcher.Path = path;

            fileSystemWatcher.Created += FileSystemWatcher_Created;
            fileSystemWatcher.Renamed += FileSystemWatcher_Renamed;

            fileSystemWatcher.Deleted += FileSystemWatcher_Deleted;

            fileSystemWatcher.EnableRaisingEvents = true;
        }

能够着重理解一下下面的 event 是如何被灌入的,而且我还写了一句 fileSystemWatcher.EnableRaisingEvents = true, 这是什么意思呢?示意以后的门路正式开始被监控,一旦监控的门路呈现变更,FileSystemWatcher 中的指定事件将会被触发。

扫一下下面定义的各个 event 事件,别离都定义了该事件的处理函数,比如说:FileSystemWatcher_CreatedFileSystemWatcher_Renamed,FileSystemWatcher_Deleted,不言而喻触发某一个事件就会触发它的事件处理函数,对吧,具体代码如下:


        private static void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)
        {Console.WriteLine("File created: {0}", e.Name);
        }

        private static void FileSystemWatcher_Renamed(object sender, FileSystemEventArgs e)
        {Console.WriteLine("File renamed: {0}", e.Name);
        }

        private static void FileSystemWatcher_Deleted(object sender, FileSystemEventArgs e)
        {Console.WriteLine("File deleted: {0}", e.Name);
        }

上面是残缺的可供参考的代码清单。


using System;

using System.IO;

namespace IDGFileSystemWatcher
{
    class Program
    {static void Main(string[] args)
        {
            string path = @"D:\IDG";
            MonitorDirectory(path);
            Console.ReadKey();}
        private static void MonitorDirectory(string path)
        {FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();
            fileSystemWatcher.Path = path;
            fileSystemWatcher.Created += FileSystemWatcher_Created;
            fileSystemWatcher.Renamed += FileSystemWatcher_Renamed;
            fileSystemWatcher.Deleted += FileSystemWatcher_Deleted;
            fileSystemWatcher.EnableRaisingEvents = true;
        }

        private static void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)
        {Console.WriteLine("File created: {0}", e.Name);
        }

        private static void FileSystemWatcher_Renamed(object sender, FileSystemEventArgs e)
        {Console.WriteLine("File renamed: {0}", e.Name);
        }

        private static void FileSystemWatcher_Deleted(object sender, FileSystemEventArgs e)
        {Console.WriteLine("File deleted: {0}", e.Name);
        }
    }
}

假如 IDG 文件夹是在 E 盘内,接下来把 Console 运行起来,而后在 IDG 文件夹内创立一个新文件,不出意外的话,你会察看到这个新建的文件名将会呈现在 控制台 上,阐明 FileSystemWatcher_Created 被胜利触发,参考下图:

译文链接:https://www.infoworld.com/art…

更多高质量干货:参见我的 GitHub: csharptranslate

正文完
 0