C#监控文件更改情况,订阅FileSystemWatcher 4个事件满足你的要求

C#监控文件更改是很容易实现的,.NET中提供的一个有用功能是FileSystemWatcher对象。如果您需要知道何时对目录进行更改(例如,添加,更改或删除文件),则可以使用此对象捕获一个事件,该事件描述更改后的区别。

.NET中提供的一个有用功能是FileSystemWatcher对象。如果您需要知道何时对目录进行更改(例如,添加,更改或删除文件),则可以使用此对象捕获一个事件,该事件描述更改后的区别。

C#监控文件更改目的

想使用C#监控服务器上哪些文件发生了更改,以及更改了哪些内容,方案有很多,其中几种是:

  • 您可能想审核对目录所做的更改;
  • 将文件复制到目录后,您可能希望根据该文件的属性自动处理它们(例如,用户上传的文件自动复制到另外一台FTP服务器)

我们经常会遇到这种需求,其中开发人员允许用户通过网站上传文件,并在其Web应用程序中包含大量文件处理代码。为了使网站目录程序更加的轻量,可以将用户上传的图片与网站文件分开。

怎样使用它呢?

这个类的使用是非常简单的。我编写了一个Demo程序并将源码放在下面。

using System.IO;
using static System.Console;
using static System.ConsoleColor;
 
namespace jhrs.com
{
    class Program
    {
        static void Main(string[] args)
        {
            //实例化一个FileSystemWatcher对象
            var fileSystemWatcher = new FileSystemWatcher();
 
            //订阅事件,创建,更改,删除,重命名
            fileSystemWatcher.Created += FileSystemWatcher_Created;
            fileSystemWatcher.Changed += FileSystemWatcher_Changed;
            fileSystemWatcher.Deleted += FileSystemWatcher_Deleted;
            fileSystemWatcher.Renamed += FileSystemWatcher_Renamed;
 
            //指定监控目录
            fileSystemWatcher.Path = @"C:UsersJeremyPicturesScreenshots";
 
            //启用监控.
            fileSystemWatcher.EnableRaisingEvents = true;
 
            WriteLine("Listening...");
            WriteLine("(Press any key to exit.)");
            
            ReadLine();
        }
 
        private static void FileSystemWatcher_Renamed(object sender, RenamedEventArgs e)
        {
            ForegroundColor = Yellow;
            WriteLine($"A new file has been renamed from {e.OldName} to {e.Name}");
        }
 
        private static void FileSystemWatcher_Deleted(object sender, FileSystemEventArgs e)
        {
            ForegroundColor = Red;
            WriteLine($"A new file has been deleted - {e.Name}");
        }
 
        private static void FileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
        {
            ForegroundColor = Green;
            WriteLine($"A new file has been changed - {e.Name}");
        }
 
        private static void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)
        {
            ForegroundColor = Blue;
            WriteLine($"A new file has been created - {e.Name}");
        }
    }
}

有什么问题吗?

好吧,也许我不会称它们为问题,但是当我使用此实用程序时,肯定有一些事情令我感到惊讶。

例如,当我拍摄一个屏幕截图并保存到我的Screenshots文件夹时,我只希望调用一个事件– Created事件。但是下面的图片显示了实际调用的所有事件。

C#监控文件更改
C#监控文件更改

让我们看看会发生什么:

  • 首先创建一个文件;
  • 然后它以某种方式改变了三遍。
  • 然后将其重命名;
  • 然后创建另一个文件并进行更改;
  • 最后,原始文件被删除。

这告诉了我有关屏幕截图捕获程序如何工作的一些有趣信息-但它还告诉我期望当我拍摄单个屏幕截图时,将触发两次Created事件,因此我必须编写代码来为此做准备。

写在最后

FileSystemWatcher类是一个有用的.NET工具,用于观察目录结构的更改。因为这会监视操作系统级别的更改,所以事件可能以意外的方式被调用。因此,有必要正确理解在更改要监视的目录时调用的操作系统事件,并设计解决方案以处理实际事件(而不是逻辑上可能期望的事件)。

本文发布于网文江湖

本文转载自国外博客,原文链接:https://jeremylindsayni.wordpress.com/2016/04/10/how-to-use-the-filesystemwatcher-in-c-to-report-file-changes-on-disk/,本文观点不代表江湖人士立场,转载请联系原作者。

(2)
江小编的头像江小编
上一篇 2019-11-27 13:05
下一篇 2019-12-03 17:16

热门推荐

Leave a Reply

Sending

国外老牌便宜域名服务商Namecheap注册com域名大优惠,抢到就赚到,优惠码:NEWCOM698
$5.98/年
直达官网