Я использую FileSystemWatcher
в своем приложении C #(, работающем в Windows ), чтобы обновлять в своем приложении файлы, которые я сейчас просматриваю. Это хорошо работает, когда я просматриваю локальный каталог. Я получаю уведомления, когда файл переименовывается, удаляется или добавляется. Но, например, когда я переименовываю файл на сетевом диске в первый раз, FileSystemWatcher
уведомляет меня о действии переименования, а затем, когда я переименовываю тот же или другой файл, FileSystemWatcher
уведомляет меня об ошибке:
the specified server cannot perform the requested operation
.
Тогда FileSystemWatcher ни о чем меня не уведомит.
Иногда я могу дважды переименовать, прежде чем FileSystemWatcher ничего не уведомит меня...
Вот мой тестовый код:
static void Main(string[] args)
{
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = @"N:\prive\defFolder";
watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite;
watcher.Changed += new FileSystemEventHandler(watcher_Changed);
watcher.Created += new FileSystemEventHandler(watcher_Changed);
watcher.Deleted += new FileSystemEventHandler(watcher_Changed);
watcher.Renamed += new RenamedEventHandler(watcher_Renamed);
watcher.Error += new ErrorEventHandler(watcher_Error);
watcher.EnableRaisingEvents = true;
Console.Read();
watcher.Dispose();
}
static void watcher_Error(object sender, ErrorEventArgs e)
{
Console.WriteLine("error : " + e.GetException().Message);
}
static void watcher_Renamed(object sender, RenamedEventArgs e)
{
Console.WriteLine("rename success");
}
static void watcher_Changed(object sender, FileSystemEventArgs e)
{
Console.WriteLine("change success");
}