我做了一个监视文件更改的测试,只要设置上 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")
{
}
}
}
}
以下是我做的测试代码。
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")
{
}
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货