zoukankan      html  css  js  c++  java
  • .NET拾忆:FileSystemWatcher 文件监控

    资源:

    https://msdn.microsoft.com/zh-cn/library/system.io.filesystemwatcher_properties(v=vs.110).aspx

    FileSystemWatcher类

    监控指定文件或目录的文件变化并触发相应事件。例如增删改、重命名、大小变化;可以按需要自定义需要监控的文件类型及文件属性改动的类型。

    1.属性:

    Path :设置要监视的目录的路径。

    IncludeSubdirectories :设置是否级联监视指定路径中的子目录。true/false

    Filter :设置筛选字符串,用于确定在目录中监视哪些类型的文件。如:"*.txt|*.doc|*.jpg"

    NotifyFilter :设置文件的哪些属性的变动会触发Changed事件。(默认值为 NotifyFilter.LastWrite | NotifyFilter.FileName | NotifyFilter.DirectoryName)

                 Attributes           --  文件或文件夹的属性。  
                 CreationTime   --  文件或文件夹的创建时间。  
                 DirectoryName --  目录名
                 FileName          --  文件名
                 LastAccess       --  文件或文件夹上一次打开的日期。  
                 LastWrite           --  上一次向文件或文件夹写入内容的日期。  
                 Security              --  文件或文件夹的安全设置。  
                 Size                    --   文件或文件夹的大小。 

    EnableRaisingEvents :设置是否开始监控。(默认为false)

    2.常用事件:

    Changed  :当更改文件和目录时发生,可以通过NotifyFilter属性设置触发该事件的需要文件更改的属性。

    Created  :  当创建文件和目录时发生。 

    Deleted :    删除文件或目录时发生。 

    Renamed  :重命名文件或目录时发生。

    3、事件类型:

    1)FileSystemEventArgs 对象:

    成员:Name:     获取受影响的文件或目录的名称。 注意:如果是级联监控子目录的话,该值为从监控目录的下个目录到受影响的文件的路径,而不只是受影响的文件名。

    FullPath : 获取受影响的文件或目录的完全限定的路径。 

    ChangeType :获取受影响的文件或目录的发生的事件类型。

                            All                 -- 文件或文件夹的创建、删除、更改或重命名。  
                           Changed     -- 文件或文件夹的更改。更改的类型包括大小、属性、安全设置、最近写入时间和最近访问时间方面的更改。  
                           Created       -- 文件或文件夹的创建。  
                           Deleted       --  文件或文件夹的删除。  
                           Renamed   --  文件或文件夹的重命名。  

    2)RenamedEventArgs 对象:

    成员:

    Name:           获取受影响的文件或目录的新名称。 

    OldName :    获取受影响的文件或目录的旧名称。

    FullPath :      获取受影响的文件或目录的完全限定的路径。

    OldFullPath : 获取受影响的文件或目录的前一个完全限定的路径。

    ChangeType :获取受影响的文件或目录的发生的事件类型。

                           All                 -- 文件或文件夹的创建、删除、更改或重命名。  
                           Changed     -- 文件或文件夹的更改。更改的类型包括大小、属性、安全设置、最近写入时间和最近访问时间方面的更改。  
                           Created       -- 文件或文件夹的创建。  
                           Deleted       --  文件或文件夹的删除。  
                           Renamed   --  文件或文件夹的重命名。 

    using System;
    using System.IO;
    using System.Runtime.InteropServices;
    
    namespace WindowsConsoleApp
    {
        public class FileWatchTest
        {
    
    
            #region 32位程序访问64位系统文件
            // 关闭64位(文件系统)的操作转向
            [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
            // 开启64位(文件系统)的操作转向
            [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);
    
    
            // IntPtr oldWOW64State = new IntPtr();
            // Wow64DisableWow64FsRedirection(ref oldWOW64State);
    
            private bool disabled = false;
            private IntPtr oldWOW64State = new IntPtr();
    
            /// <summary>
            /// 禁止64位系统转向(true关闭转向,false开启)
            /// </summary>
            public bool DisableWow64
            {
                get
                {
                    return disabled;
                }
                set
                {
                    if (disabled == value)
                    {
                        return;
                    }
    
                    disabled = value;
    
    
                    if (disabled)
                    {
                        Wow64RevertWow64FsRedirection(oldWOW64State);
                    }
                    else
                    {
                        Wow64RevertWow64FsRedirection(oldWOW64State);
                    }
    
                }
            }
            #endregion
    
            public void StartWatch(string path, string filter)
            {
                FileSystemWatcher watcher = new FileSystemWatcher();
    
                watcher.Path = path;
                watcher.IncludeSubdirectories = false;   //设置是否监控目录下的所有子目录
                //watcher.Filter = "*.txt|*.doc|*.jpg";   //设置监控文件的类型 
                watcher.Filter = filter;
                watcher.NotifyFilter = NotifyFilters.Size | NotifyFilters.LastWrite | NotifyFilters.FileName;   //设置文件的文件名、目录名及文件的大小改动会触发Changed事件  
    
                watcher.Changed += new FileSystemEventHandler(OnProcess);
                watcher.Created += new FileSystemEventHandler(OnProcess);
                watcher.Deleted += new FileSystemEventHandler(OnProcess);
                watcher.Renamed += new RenamedEventHandler(OnRenamed);
                watcher.Error += new ErrorEventHandler(OnError);
                watcher.EnableRaisingEvents = true;
            }
    
    
    
            #region 监控事件
    
            private static void OnProcess(object source, FileSystemEventArgs e)
            {
                if (e.ChangeType == WatcherChangeTypes.Created)
                {
                    OnCreated(source, e);
    
                }
                else if (e.ChangeType == WatcherChangeTypes.Changed)
                {
                    OnChanged(source, e);
    
                }
                else if (e.ChangeType == WatcherChangeTypes.Deleted)
                {
                    OnDeleted(source, e);
    
                }
                else
                {
                    OnOther(source, e);
                }
            }
    
            private static void OnCreated(object source, FileSystemEventArgs e)
            {
    
                Console.WriteLine("新建");
    
            }
    
            private static void OnChanged(object source, FileSystemEventArgs e)
            {
    
                Console.WriteLine("改变");
            }
    
            private static void OnDeleted(object source, FileSystemEventArgs e)
            {
    
                Console.WriteLine("删除");
            }
    
            private static void OnRenamed(object source, RenamedEventArgs e)
            {
    
                Console.WriteLine("重命名");
            }
            private static void OnOther(object source, FileSystemEventArgs e)
            {
    
                Console.WriteLine("其他");
    
            }
            private static void OnError(object source, ErrorEventArgs e)
            {
    
                Console.WriteLine("错误" + e.GetException());
    
            }
    
            #endregion
        }
    }
  • 相关阅读:
    JavaScript--事件绑定及深入(26)
    JavaScript--事件对象(25)
    JavaScript--事件入门(24)
    JavaScript--动态加载脚本和样式(23)
    JavaScript--DOM元素尺寸和位置(22)
    JavaScript--DOM操作表格及样式(21)
    JavaScript--DOM进阶(20)
    jQuery-瀑布流的取巧做法分享
    Less开发指南(二)- 基本语法
    less开发指南(一)- 小牛试刀
  • 原文地址:https://www.cnblogs.com/xmai/p/6861297.html
Copyright © 2011-2022 走看看