Есть ли способ определить с FSW, если файл или каталог был удален?.NET filesystemwatcher - это был файл или каталог?
ответ
Вы можете опросить свойство FileSystemEventArgs.FullPath
, чтобы узнать, является ли это каталогом или файлом.
if (Path.GetFileName(e.FullPath) == String.Empty)
{
//it's a directory.
}
Чтобы проверить, не является ли он файлом или каталогом.
Он был удален, так что эти вызовы потерпят неудачу, нет? –
@Steven Sudit: Сначала вам нужно проверить свойство FileSystemEventArgs.ChangeType. –
'File.GetAttributes' выдает« FileNotFoundException »для удалённого файла. –
Вот упрощенная и исправленный вариант решения Флетчера:
namespace Watcher
{
class Program
{
private const string Directory = @"C:\Temp";
private static FileSystemWatcher _fileWatcher;
private static FileSystemWatcher _dirWatcher;
static void Main(string[] args)
{
_fileWatcher = new FileSystemWatcher(Directory);
_fileWatcher.IncludeSubdirectories = true;
_fileWatcher.NotifyFilter = NotifyFilters.FileName;
_fileWatcher.EnableRaisingEvents = true;
_fileWatcher.Deleted += WatcherActivity;
_dirWatcher = new FileSystemWatcher(Directory);
_dirWatcher.IncludeSubdirectories = true;
_dirWatcher.NotifyFilter = NotifyFilters.DirectoryName;
_dirWatcher.EnableRaisingEvents = true;
_dirWatcher.Deleted += WatcherActivity;
Console.ReadLine();
}
static void WatcherActivity(object sender, FileSystemEventArgs e)
{
if(sender == _dirWatcher)
{
Console.WriteLine("Directory:{0}",e.FullPath);
}
else
{
Console.WriteLine("File:{0}",e.FullPath);
}
}
}
}
+1. Ваше решение намного проще – fletcher
У меня есть ошибки, но вы уже придумали эту идею, прежде чем я это сделал. –
Это решение не принимает во внимание, что оба 'FileSystemWatcher' работают на отдельных потоках. Таким образом, если в просмотренном каталоге много событий, порядок событий, который вы видите в приложении, может быть другим - т.е. вы можете записать, что файл был создан в каталоге, который еще не существует, за которым следует событие, которое создает указанный каталог. – Paya
I временное использование функции «Путь» на начальном этапе, но позже в случае не удалять исправить его Directory.Exists. Однако это не исправить Удалить дело
bool isDirectory = Path.GetExtension(e.FullPath) == string.Empty;
if (e.ChangeType != WatcherChangeTypes.Deleted)
{
isDirectory = Directory.Exists(e.FullPath);
}
Ваш вопрос только имеет смысл, если может быть файл и каталог с тем же именем в том же пути. например Если у вас есть имена файлов без расширения или каталогов с расширением.
Если ваши каталоги и файлы соответствуют обычным соглашениям, просто проверяйте наличие расширения в полном пути (bool iSDirectory = Path.GetExtension(e.FullPath).Equals("");
), который работает независимо от того, существует ли файл/каталог или нет, поскольку метод просто анализирует указанный путь и не имеет никакого отношения к файлу.
Если вам нужно иметь дело с нетрадиционными проблемами, о которых я упоминал в начале, вы можете указать : проверить, существует ли каталог или файл в этом месте. Если это так, вы относитесь к ним так, как если бы оба были удалены. Если один из них существует, вы относитесь к другому так, как если бы он был удален.
Ваше расследование означает, что вы храните список файлов и каталогов где-то, поэтому, проверяя этот список, вы можете принять решение об обработке.
Я думаю, что этот подход лучше, чем решение, использующее два наблюдателя файловой системы, чтобы отличить друг от друга.
- 1. FileSystemWatcher хранения родительского каталог
- 2. . NET FileSystemWatcher для Cocoa
- 3. FileSystemWatcher для выполнения .NET функции
- 4. FileSystemWatcher
- 5. VB.NET FileSystemWatcher - Скопированный файл
- 6. FileSystemWatcher - невозможно прочитать созданный файл
- 7. каталог был обнаружен как файл в perl
- 8. .NET Web Api - 404 - Файл или каталог не найдены
- 9. Ошибка 6 (net :: ERR_FILE_NOT_FOUND): файл или каталог не найден
- 10. Создать каталог async (без использования FileSystemWatcher)?
- 11. Mac OS: как определить путь - это файл или каталог
- 12. Как определить путь - это файл или каталог в vb6?
- 13. Есть ли способ распознать элемент - это файл или каталог?
- 14. Как проверить удаленный путь - это файл или каталог?
- 15. Проверить погоду путь - это каталог или файл в сценарии оболочки
- 16. Как проверить указанный путь - это каталог или файл в vbscript?
- 17. Определить, что файл был изменен или был создан
- 18. Ошибка FileSystemWatcher
- 19. php читает каталог или файл из сети
- 20. Файл или каталог _findfirst C++
- 21. FileSystemWatcher - Файл готов к использованию
- 22. .Net Windows Service и FileSystemWatcher issue
- 23. FileSystemWatcher
- 24. Это C# или C# .NET?
- 25. .net FileSystemWatcher не подхватывает перемещенные папки
- 26. скачать файл в каталог сценарий был запущен из powershell 2.0
- 27. Работа FileSystemWatcher выполняется?
- 28. Копировать файл в Модификации FIleSystemWatcher, Visual Basic (VS 2012 V11)
- 29. Мониторинг каталога с FileSystemWatcher
- 30. .NET Sharepoint Создать каталог
Я не уверен, что вы можете, честно говоря. Очевидным обходным решением будет перезапуск при запуске для создания списка каталогов. Если это не в этом списке, это файл. –
Это не «C# FileSystemWatcher». Это .NET FileSystemWatcher. Он работает так же хорошо со всеми .NET-языками, а не только с C#. –
Мне кажется, что это может сработать, если вы запустили два отдельных FSW-мониторинга одного и того же каталога и отличались только их значениями «NotifyFiter». –