如何通过 C# 自动捕获一个文件的变更?

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过 C# 自动捕获一个文件的变更?相关的知识,希望对你有一定的参考价值。

咨询区

  • PaulB

请问在 C# 中如何实现当一个磁盘文件的变更,让我的程序马上能感知到?

回答区

  • Dirk Vollmar

在 C# 中有一个 FileSystemWatcher 类,它专门用来做文件的变更感知,大概有如下四类通知事件:

  1. Changed

文件内容变更通知,参考连接:http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.changed.aspx

  1. Created

文件创建变更通知,参考连接:http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.created.aspx

  1. Deleted

文件删除变更通知,参考连接:https://docs.microsoft.com/en-us/dotnet/api/system.io.filesystemwatcher.deleted?redirectedfrom=MSDN&view=net-5.0

  1. Renamed

文件重命令通知,参考连接:http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.renamed.aspx

下面的代码就是用来监控 D:\\test 目录下的所有 txt 文件。

class Program
    {
        static void Main(string[] args)
        {
            CreateFileWatcher(@"D:\\test");

            Console.ReadLine();
        }

        public static void CreateFileWatcher(string path)
        {
            // Create a new FileSystemWatcher and set its properties.
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path = path;
            /* 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 += new FileSystemEventHandler(OnChanged);
            watcher.Created += new FileSystemEventHandler(OnChanged);
            watcher.Deleted += new FileSystemEventHandler(OnChanged);
            watcher.Renamed += new RenamedEventHandler(OnRenamed);

            // Begin watching.
            watcher.EnableRaisingEvents = true;
        }

        // Define the event handlers.
        private static void OnChanged(object source, FileSystemEventArgs e)
        {
            // Specify what is done when a file is changed, created, or deleted.
            Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
        }

        private static void OnRenamed(object source, RenamedEventArgs e)
        {
            // Specify what is done when a file is renamed.
            Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
        }
    }

当然如何你想监控 D:\\test 下包括子目录的 txt 文件,可以配置 IncludeSubdirectories 属性,参考如下代码:

watcher.IncludeSubdirectories = true;

点评区

FileSystemWatcher 非常强大,在 .NETCore 中实现对 appsettings 的监控,用的就是它作为底层实现。

以上是关于如何通过 C# 自动捕获一个文件的变更?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 将新文件(变更集编号)合并到另一个分支中

捕获文件在 C# 中通过蓝牙发送

通过变更数据捕获和散列提高合并性能

如何在片段中从相机捕获图像,

如何通过C#中的特定片段从句子中提取整个单词?

捕获mssqlservice 修改表后的数据,统一存储到特定的表中,之后通过代码同步两个库的数据