File.Exists () возвращает false в удаленном событии FileSystemWatcher

1

Я боролся с проблемой. У меня есть программа синхронизации, и мне нужно знать, является ли элемент наблюдения файлом или папкой. Проблема в том, что я проверяю файл или папку на наличие - независимо от того, что, если я проверяю файл, File.Exists всегда возвращает false:

private void onDelete(object o, FileSystemEventArgs e)
{
    if (Directory.Exists(e.FullPath))
        Directory.Delete(watched + e.Name, true);

    if (File.Exists(e.FullPath))
        File.Delete(e.FullPath);
}

Кто-нибудь видит, где проблема может быть?

  • 0
    Что такое e.FullPath при удалении файла?
  • 0
    что вы получаете в e.FullPath ? и вы проверили, существует ли файл в действительности или нет?
Показать ещё 1 комментарий
Теги:
filesystemwatcher

3 ответа

5
Лучший ответ

Вы пытаетесь найти файл/папку в onDelete, этот метод будет запущен, когда файл/папка уже будет удалена. Поэтому вы не должны получать этот файл в папке, поскольку он удален и не существует.

  • 0
    о ... хорошо, спасибо. Это не приходило мне в голову. Я постараюсь исправить это, если я выясню, как
  • 0
    Добро пожаловать.
0

FileSystemWatcher - это система уведомлений, а не крючок.

Вы не вмешиваетесь в события, которые он запускает, поэтому вам не нужно удалять файл самостоятельно, когда событие Удалено: вы получаете такое событие после того, как уже произошло удаление.

0

Как сказал Адил в своем ответе, вы уже слишком поздно. Однако, возможно, вы могли бы отличить элементы от имени файла? Если вы только создаете файлы и папки, вы можете установить соглашение. Например, вы можете использовать расширение файла, которое затем можно легко получить из имени файла (Path.GetExtension).

Кроме этого, вы, вероятно, застряли бы в том, чтобы постоянно учитывать все файлы и папки в каталоге, чтобы убедиться, что они нужны вам.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню