Как перехватить события удаления папки наблюдения - PullRequest
2 голосов
/ 29 марта 2012

У меня есть каталог для просмотра файлов с именем FileWatch

 C:\Users\MyFolder\FileWatch\Test

Папка FileWatch - это каталог часов.Мое приложение получает все события, которые происходят в каталоге FileWatch.

Однако, если я удаляю саму папку FileWatch , событие файловой системы не создается.способ захвата, если пользователь сам удаляет каталог FileWatch?

Ответы [ 4 ]

4 голосов
/ 29 марта 2012

Я предлагаю вам просто посмотреть каталог parent или вы можете попробовать использовать таймер для проверки удаления каталога с помощью Directory.Exists.

РЕДАКТИРОВАТЬ: Если вам нужно убедиться, что каталог не будет удален, вы можете создать и заблокировать файл внутри каталога во время просмотра.

2 голосов
/ 29 марта 2012

Согласно описанию класса FileSystemWatcher , события возникают при изменении / удалении / создании / переименовании файла или каталога в отслеживаемом каталоге .

Итак,он не должен смотреть сам каталог.Он отслеживает только файлы и каталоги внутри этого каталога.

Опции (как указано выше) - вместо этого просмотрите каталог C:\Users\MyFolder\FileWatch.

ОБНОВЛЕНИЕ: Если вы хотите посмотретьтолько для каталога C:\Users\MyFolder\FileWatch\Test удаление:

string path = @"C:\Users\MyFolder\FileWatch"; // watch for parent directory
if (!Directory.Exists(path)) // verify it exists before start
    return;

FileSystemWatcher watcher = new FileSystemWatcher(path);
// set option to track directories only
watcher.NotifyFilter = NotifyFilters.DirectoryName;

watcher.Deleted += (o, e) =>
{
    if (e.FullPath == @"C:\Users\MyFolder\FileWatch\Test")
    {
        // If you are here, your test directory was deleted
    }
};

watcher.EnableRaisingEvents = true;
1 голос
/ 22 октября 2014

Это сработало для меня, оно использует блокирующий вызов и не требует события. Я уверен, что кто-то проголосует за меня, но эй, если это кому-то поможет, вот почему я здесь!

using System.IO;

namespace Sapbucket.Common
{
    public static class FolderSupport
    {
        public static void DeleteFolder(string folderPath, bool recursively)
        {
            DirectoryInfo _directoryInfo;

            _directoryInfo = new DirectoryInfo(folderPath);
            _directoryInfo.Refresh();
            if (_directoryInfo.Exists)
            {
                _directoryInfo.Delete(recursively);

                while (_directoryInfo.Exists)
                    _directoryInfo.Refresh();
            }
        }
    }
}
0 голосов
/ 29 марта 2012

Вместо настройки экземпляра FileWatcher в папке FileWatch установите его в родительской папке (MyFolder).Таким образом, вы можете перехватывать события файла в папке FileWatch, а также событие, которое запускается при удалении самой папки FileWatch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...