我在4.0中使用FileSystemWatcher进行混淆。我觉得这非常有用,但我陷入了循环。我试图监视每当一个ini被改变,并将其改回到正确的默认值(长篇故事),但改变事件复制到新文件导致它下降到一个循环...任何想法>?我玩弄了删除和重新创建文件的想法,以避免触发已更改的事件,但这导致了另一套我希望避免的程序问题。另外我想象我可以覆盖文本,但这也带来了同样的问题。在此先感谢帮助FileSystemWatcher,取消订阅事件
static void Main() { Watch (@"\\NoFault2010\Lexis\Data\Setup\", "tmconfig.ini", true); }
static void Watch (string path, string filter, bool includeSubDirs)
{
using (var watcher = new FileSystemWatcher (path, filter))
{
watcher.Changed += FileChanged;
watcher.EnableRaisingEvents = true;
Console.WriteLine("Do Not Close ... \n\nThis is a Temporary Configuration Manager for Time Matters ... \n\n\nI'm Listening ............");
Console.ReadLine();
}
}
static void FileChanged (object o, FileSystemEventArgs e)
{
string _right_stuff = @"\\NOFAULT2010\Lexis\Data\Templates\Programs\tmconfig.ini";
string _working = @"\\NOFAULT2010\Lexis\Data\Setup\tmconfig.ini";
System.Threading.Thread.Sleep(2000);
File.Copy(_right_stuff, _working, true);
Console.WriteLine("File {0} has been {1}", e.FullPath, e.ChangeType);
MAIL_IT("[email protected]", "TM Master.INI has been altered", "Check the Master INI and Yell At Ecopy Guy " + e.ChangeType + e.FullPath);
}
如何取消订阅该事件以避免进入此循环。
-0.5:有可能是比赛在这里ŧ帽子会不起作用。如果交付活动有延迟(例如,他们排队),然后更改事件将在FileChanged()退出后发布(并且inEdit已返回false)。 – payne 2011-02-08 00:47:45