我做了一个监视文件更改的测试,只要设置上  watch.NotifyFilter =  NotifyFilters.LastWrite,它的Changed事件为什么会触发两次?请各位帮一下忙。
以下是我做的测试代码。
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;namespace WatchFileChangedTimes
{
    class Program
    {
        System.IO.FileSystemWatcher watch = new System.IO.FileSystemWatcher();
        public void InitAttribute()
        {
            this.watch.Renamed += new RenamedEventHandler(watch_Renamed);
            this.watch.Created += new FileSystemEventHandler(this.OnChanged);
            this.watch.Deleted += new FileSystemEventHandler(this.OnChanged);
            this.watch.Changed += new FileSystemEventHandler(this.OnChanged);
            watch.Path = "d:\\Share\\";
            //是否包含此目录下的子目录和子目录里面的文件类型
            watch.IncludeSubdirectories = true;          
            watch.NotifyFilter =  NotifyFilters.LastWrite;
            watch.Filter = "*.txt";            
            watch.EnableRaisingEvents = true;
        }
        void watch_Renamed(object sender, RenamedEventArgs e)
        {
            Console.WriteLine("******************************File Renamed*********");
            Console.WriteLine("Old Name File:   " + e.OldName );
                Console.WriteLine("New Name is :" + e.Name );
            Console.WriteLine("Old Path" + e.OldFullPath );
            Console.WriteLine("New Full Path: " + e.FullPath );
            Console.WriteLine(" New Name is: " + e.Name );
            Console.WriteLine("Type is :" + e.ChangeType);
            Console.WriteLine("******************************File Renamed*********");
        }
        public void OnChanged(object sender, FileSystemEventArgs e)
        {
            if (e.ChangeType == WatcherChangeTypes.Created)
            {
                Console.WriteLine("******************************File Create*********");
                Console.WriteLine("Create File:   " + e.Name);
                Console.WriteLine("Full Path " + e.FullPath);
                Console.WriteLine("Type is " + e.ChangeType);
                Console.WriteLine("******************************File Create*********");
            }
            else if (e.ChangeType == WatcherChangeTypes.Changed)
            {
                Console.WriteLine("******************************File Changed*********");
                Console.WriteLine("Changed File:   " + e.Name);
                Console.WriteLine("Full Path :" + e.FullPath);
                Console.WriteLine("Type is: " + e.ChangeType);
                Console.WriteLine("******************************File Changed*********");
            }
            else if (e.ChangeType == WatcherChangeTypes.Deleted)
            {
                Console.WriteLine("******************************File Deleted*********");
                Console.WriteLine("Delete File:   " + e.Name);
                Console.WriteLine("Full Path " + e.FullPath);
                Console.WriteLine("Type is " + e.ChangeType);
                Console.WriteLine("******************************File Deleted*********");
            }
            else if (e.ChangeType == WatcherChangeTypes.Renamed)
            {
                Console.WriteLine("******************************File Renamed*********");
                Console.WriteLine("Renamed File:   " + e.Name);
                    Console.WriteLine("Full Path " + e.FullPath);
                Console.WriteLine("Type is " + e.ChangeType);
                Console.WriteLine("******************************File Renamed*********");
            }
        }
        static void Main(string[] args)
        {
            Program pro = new Program();
            pro.InitAttribute();
            while (Console.ReadLine() != "q")
            {
            }
        }
    }
}