Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
LapisAlchemist
248 / 160 / 14
Регистрация: 10.03.2012
Сообщений: 544
Записей в блоге: 2
#1

FileSystemWatcher работает некорректно

30.07.2012, 15:57. Просмотров 1678. Ответов 4
Метки нет (Все метки)

В программе имеется FileSystemWatcher, настроенный на мониторинг всех изменений во всех папках на диске. При безвозвратном удалении файла с этого диска событие OnDeleted элемента срабатывает, а вот при перемещении файла или его удалении в Корзину (т.е. то же перемещение в папку D:\Recycle.Bin) ни одно из событий Watcher'а не срабатывает (даже OnError). Пробовал увеличить размер InternalBuffer'а, безрезультатно.
Что можно с этим сделать? Или какие есть альтернативы этому компоненту?
Заранее спасибо за ответы/советы.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2012, 15:57
Ответы с готовыми решениями:

Служба некорректно работает в Windows 7
Добрый день! Помогите пожалуйста, не знаю что делать. Состряпал службу на...

Массив потоков работает весьма некорректно
Ребят, помогите разобраться. Есть код: public void Processor(int i, int...

Tesseract - некорректно работает распознавание текста с картинки
Ребят, работаю с данной библиотекой, а точнее с ее врапером Tesseract by...

Оконная версия консольной программы работает некорректно
Попробовал переделать из консольного приложения под win forms, но возникло 2...

c# , fileSystemWatcher
задавая путь fileSystemWatcher.Path = "D:\\" могу ли я исключить некоторые...

4
kolorotur
Эксперт .NET
10000 / 8398 / 2061
Регистрация: 17.09.2011
Сообщений: 14,460
30.07.2012, 18:07 #2
Вот так вот сразу - "FileSystemWatcher работает некорректно".
Значение FileName в фильтр включено?
Событие Deleted обрабатывается?
0
LapisAlchemist
248 / 160 / 14
Регистрация: 10.03.2012
Сообщений: 544
Записей в блоге: 2
30.07.2012, 19:20  [ТС] #3
Цитата Сообщение от kolorotur Посмотреть сообщение
Значение FileName в фильтр включено?
Событие Deleted обрабатывается?
Вот такой код создания нового FileSystemWatcher'а:
C#
1
2
3
4
5
6
7
8
9
10
11
12
                    FileSystemWatcher watcher = new FileSystemWatcher(path, filter);
                    watcher.NotifyFilter = NotifyFilters.Attributes | NotifyFilters.CreationTime | NotifyFilters.DirectoryName | NotifyFilters.FileName | NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.Security | NotifyFilters.Size;
                    watcher.Renamed += new RenamedEventHandler(watcher_Renamed);
                    watcher.Changed += new FileSystemEventHandler(watcher_Changed);
                    watcher.Created += new FileSystemEventHandler(watcher_Created);
                    watcher.Deleted += new FileSystemEventHandler(watcher_Deleted);
                    watcher.Error += new ErrorEventHandler(watcher_Error);
                    watcher.InternalBufferSize = 10000;
                    //watchers -- коллекция FileSystemWatcher'ов типа Dictionary
                    watchers.Add(createKey(path, filter), watcher);
                    watcher.IncludeSubdirectories = true;
                    watcher.EnableRaisingEvents = true;
При перемещении файлов обработчики событий НЕ вызываются вообще, я специально проверял точками останова, но при создании новых файлов/папок и при их безвозвратном удалении все работает.
0
kolorotur
Эксперт .NET
10000 / 8398 / 2061
Регистрация: 17.09.2011
Сообщений: 14,460
30.07.2012, 22:17 #4
А что передается в качестве path и filter?
Вот пример на основе вашего кода, запускал на XP и семерке - все прекрасно работает при удалении:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
static void Main()
{
    FileSystemWatcher watcher = new FileSystemWatcher(".\\", "*");
    watcher.NotifyFilter = NotifyFilters.Attributes | NotifyFilters.CreationTime | NotifyFilters.DirectoryName | NotifyFilters.FileName | NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.Security | NotifyFilters.Size;
    watcher.Renamed += new RenamedEventHandler(WatcherCallback);
    watcher.Changed += new FileSystemEventHandler(WatcherCallback);
    watcher.Created += new FileSystemEventHandler(WatcherCallback);
    watcher.Deleted += new FileSystemEventHandler(WatcherCallback);
    watcher.InternalBufferSize = 10000;
    watcher.IncludeSubdirectories = true;
    watcher.EnableRaisingEvents = true;
 
    Console.ReadLine();
}
 
static void WatcherCallback(object sender, FileSystemEventArgs e)
{
    Console.WriteLine("{0} -> {1}", e.FullPath, e.ChangeType);
}
0
LapisAlchemist
248 / 160 / 14
Регистрация: 10.03.2012
Сообщений: 544
Записей в блоге: 2
31.07.2012, 12:06  [ТС] #5
Цитата Сообщение от kolorotur Посмотреть сообщение
А что передается в качестве path и filter?
path = "D:\"; filter = "*.*";
У меня создается несколько FileSystemWatcher'ов, каждый настраивается на один диск (HDD, CD, флешка и т.д.) в зависимости от количества этих устройств в системе.
0
31.07.2012, 12:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2012, 12:06

FileSystemWatcher дублирует событие изменения
Собственно проблема озвучена в названии темы. Не знаю, как это побороть... При...

Наблюдение за несколькими папками (FileSystemWatcher)
Поставили передо мной непростую задачу. Необходимо организовать одновременное...

Мониторинг определенной папки. FileSystemWatcher
Привет, Всем! Хотел бы узнать такой момент, по поводу FileSystemWatcher. Мне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru