Я боролся с проблемой. У меня есть программа синхронизации, и мне нужно знать, является ли элемент наблюдения файлом или папкой. Проблема в том, что я проверяю файл или папку на наличие - независимо от того, что, если я проверяю файл, 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);
}
Кто-нибудь видит, где проблема может быть?
Вы пытаетесь найти файл/папку в onDelete
, этот метод будет запущен, когда файл/папка уже будет удалена. Поэтому вы не должны получать этот файл в папке, поскольку он удален и не существует.
FileSystemWatcher - это система уведомлений, а не крючок.
Вы не вмешиваетесь в события, которые он запускает, поэтому вам не нужно удалять файл самостоятельно, когда событие Удалено: вы получаете такое событие после того, как уже произошло удаление.
Как сказал Адил в своем ответе, вы уже слишком поздно. Однако, возможно, вы могли бы отличить элементы от имени файла? Если вы только создаете файлы и папки, вы можете установить соглашение. Например, вы можете использовать расширение файла, которое затем можно легко получить из имени файла (Path.GetExtension
).
Кроме этого, вы, вероятно, застряли бы в том, чтобы постоянно учитывать все файлы и папки в каталоге, чтобы убедиться, что они нужны вам.
e.FullPath
при удалении файла?e.FullPath
? и вы проверили, существует ли файл в действительности или нет?