2010-03-30 4 views
0

Я использую FileWatcher для запуска обработки файлов, как только они будут добавлены в папку. После обработки файла он удаляется.FileWatcher запускает событие изменения после удаления файла

Моя проблема в том, что после удаления файла я получаю другое событие изменения файла, которое так близко к удалению, что в некоторых случаях проверяет файл. Exists сообщает, что файл все еще существует. Но, конечно, несколько миллисекунд позже, когда вы пытаетесь обработать файл, он на самом деле не существует. FileWatcher настроен как уведомление, отправив уведомление по адресу NotifyFilters.FileName | NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.Size | NotifyFilters.Attributes

Спасибо, флорин

+0

Есть ли причина не использовать событие 'Created' вместо' Changed'? –

ответ

1

Если вы берете немного поиска на SO, вы найдете много вопросов, где люди любят, чтобы проверить, если они смогут получить доступ к файлу или если у них есть права необходимы.

Проблема в том, что даже если вы ее проверите (как и с File.Exists()), ситуация может быть изменена, когда дело доходит до реальной операции.

Так что просто выбросьте File.Exists() и положите try catch вокруг операции удаления.
Если это не удается, это до вас, чтобы решить, если вы просто поместите его молча, сообщить пользователю, закрыть приложение, выключить компьютер и т.д.

+0

Проблема заключается не в том, как удалить файл, а в том, что у меня есть событие изменения, выпущенное после удаления файла. Таким образом, наблюдатель запускает удаление и после того, как он запускает другое событие изменения, в этот момент (событие изменения) файл, похоже, все еще существует .... – florin

+0

@florin: Но если у вас есть попытка поймать операцию удаления и сделать правильная реакция (тихое сообщение, сообщение в TextBox), это не должно быть проблемой, потому что приложение работает должным образом. – Oliver

+0

Я пытаюсь переформулировать: 1. Я удаляю файл X 2. Я получаю событие события удаления для файла X 3. Я получаю событие изменения для файла X, и поскольку файл все еще существует, он ставится в очередь для обработки. 4. Обработка переходит к файлу X, и файл не существует. Теперь на этом этапе я могу игнорировать не выходящий файл. Но я хочу зарегистрировать сообщение в этом случае, потому что FileWatcher может вести себя некорректно (получить переполнение внутреннего стека), и я хочу, чтобы где-то регистрироваться, что в рабочем процессе существует некоторая несогласованность. – florin

Смежные вопросы