2015-06-17 4 views
0

Почему Directory.Exists возвращает true для каталога, наблюдаемого FileSystemWatcher, даже если он был удален.Directory.Exists и FileSystemWatcher

Прежде чем проверять Directory.Exists, я должен позвонить EnableRaisingEvents = false, так как он всегда возвращает true.

Edit:

Я пытаюсь проверить, если папка была удалена или соединение потеряно, используя событие ошибки. Чтобы добавить задержку, я проверил ее с помощью команды Tread.Sleep() перед проверкой каталога, но он все еще считает, что он существует.

+0

Как вы удалили каталог? В коде или вручную? И если в коде вы можете показать нам код? – sstan

+0

Я удалил его вручную. – djmj

ответ

3

Вы просто видите честную правду, каталог фактически не удаляется. Операционная система активно препятствует исчезновению каталога, когда на нем открыт дескриптор. Как и FSW, когда вы начинаете смотреть. Или когда каталог является Environment.CurrentDirectory процесса.

Это не означает, что вы удаляете каталог. Очень похоже на параметр FileShare.Delete в .NET для файлов. Теперь он будет существовать в limbo, ожидая закрытия последнего дескриптора, прежде чем он может быть удален из файловой системы. Любая программа, которая пытается использовать каталог, пока это состояние limbo, будет удалена, чтобы гарантировать, что это в конечном итоге произойдет.

Вы должны вызвать метод FileSystemWatcher.Dispose().

1

FileSystemWatcher известен тем, что поднимает события в начале события не тогда, когда событие завершено. Здесь много вопросов об ожидании копирования, чтобы закончить.

То же самое относится к удалению папки. Требуется время для удаления папки.