Альтернативные способы получения свойств файла? - PullRequest
1 голос
/ 18 августа 2011

Справочная информация:

У меня есть служба мониторинга файлов, которая отслеживает изменения файлов в локальной системе, используя класс FileSystemWatcher, и я обрабатываю такие события, как Created, Deleted, Renamed.Когда эти события запускаются, я бы просто хотел получить свойства файла, такие как FileName, FileSize, CreationTime, LastAccessTime, LastWriteTime, используя класс FileSystemInfo.

Проблема:

Пока эта служба работает, я не могу удалить некоторые программы, например (Microsoft Security Essentials).У меня такое ощущение, что эти сервисы висят на ресурсах файлов, помеченных для удаления, потому что я могу удалить эти программы, только если запущен только этот сервис.

Мой вопрос: как мне GET THE PROPERTIES OF THE FILE (как указано выше) ALTERNATIVE и эффективным способом without hanging on to the resources of the file?

Вот мой код с использованием FileSystemInfo

public void OnCreate/OnRenamed(object source, FileSystemEventArgs e)

{ FileInfo file = new FileInfo(e.FullPath); 

String output = "<Event><TimeStamp>" + currentTime + "</TimeStamp>";
            output += "<Name>" + action + "</Name>";
            output += "<Properties><FileName>" + file.Name + "</FileName>";
            output += "<FullPath>" + file.FullName + "</FullPath>";
            output += "<FileSize>" + file.Length + "</FileSize>";
            output += "<CreationTime>" + String.Format("{0:yyyyMMdd-HHmmss.fff}", file.CreationTime) + "</CreationTime>";
            output += "<LastAccess>" + String.Format("{0:yyyyMMdd-HHmmss.fff}", file.LastAccessTime) + "</LastAccess>";
            output += "<LastWriteTime>" + String.Format("{0:yyyyMMdd-HHmmss.fff}", file.LastWriteTime = DateTime.Now) + "</LastWriteTime></Properties></Event>";

}

С уважением, Дерек

Ответы [ 2 ]

2 голосов
/ 18 августа 2011

При использовании FileSystemInfo обычно не "зависает" на этих файлах.Вы должны сначала выяснить, что именно приводит к зависанию других программ во время удаления.Используйте ProcessMonitor , чтобы увидеть, к каким файлам обращаются во время удаления.Инструмент довольно понятен, вам нужно фильтровать активность файловой системы.Прочитайте это или Google.

Попробуйте поэкспериментировать, убирая по одной вещи за раз.Я предполагаю, что эти программы удаляются успешно, когда ваш сервис не работает.Это доказывает, что действительно ваш сервис вызывает проблемы.Сначала прокомментируйте свой код FileSystemInfo.Посмотрите, исчезнет ли проблема.Затем закомментируйте FileSystemWatcher и посмотрите, поможет ли это.

Обновление : похоже, это неправильная строка:

file.LastWriteTime = DateTime.Now

Попробуйте прокомментировать это назначение и посмотрите, решает ли онопроблема:

file.LastWriteTime /* = DateTime.Now */

Это опечатка или вам действительно нужно написать LastWriteTime?

0 голосов
/ 18 августа 2011

Что вы можете сделать, это проверить каждый интервал для LastAccessTime и LastWriteTime и выполнить небольшую математическую обработку на основе интервала, и вы сможете определить, был ли файл последний раз доступен или изменен в течение интервала времени. Если это так, делай то, что должен делать. Просто идея ...

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