Использование FileSystemWatcher для обнаружения переименования папок
У меня есть приложение на основе файлов. FileSystemWatcher отлично работает для большинства моих целей, кроме переименования каталогов. Вот пример кода:
class Program
{
static void Main(string[] args)
{
var directoryWatcher = new FileSystemWatcher("D:\\Test")
{
NotifyFilter = NotifyFilters.CreationTime | NotifyFilters.Attributes | NotifyFilters.FileName | NotifyFilters.LastAccess |
NotifyFilters.LastWrite | NotifyFilters.Security | NotifyFilters.Size,
Filter = "*.*"
};
directoryWatcher.EnableRaisingEvents = true;
directoryWatcher.IncludeSubdirectories = true;
directoryWatcher.Changed += FolderChanged;
directoryWatcher.Created += FolderCreated;
directoryWatcher.Deleted += FolderDeleted;
directoryWatcher.Renamed += FolderRenamed;
Console.ReadLine();
}
private static void FolderRenamed(object sender, RenamedEventArgs e)
{
}
private static void FolderDeleted(object sender, FileSystemEventArgs e)
{
}
private static void FolderCreated(object sender, FileSystemEventArgs e)
{
}
private static void FolderChanged(object sender, FileSystemEventArgs e)
{
}
}
внутри d:\Test есть папка. как только я переименую его, ничего не произойдет. Я не получаю никакого события вообще.
Есть идеи?
Спасибо
Amit
1 ответ
Ваш код в порядке, но у вас нет уведомителей
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
а также
// Add event handlers.
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnRenamed);
посмотрите полный пример кода здесь
https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.renamed(v=vs.110).aspx