2012-01-09 3 views

ответ

0

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

Есть два способа, которые я могу придумать, но оба связаны с опросом системы.

  1. Петля каждые X секунд и попытайтесь открыть файл для записи. Если это не удается, файл открыт.

  2. Зациклируйте каждые X секунд и используйте запрос WMI, чтобы узнать, используется ли файл.

В любом случае вам придется обрабатывать последовательные «открытия» в течение определенного периода времени, считая только один экземпляр.

+0

, в этом случае я должен изменить файл тревоги по умолчанию с файлом пустоты x + 1 second long, чем я бы не пропустил никаких случаев ... – Bartu

0

Вы можете использовать метод File.LastAccessTime.

Подробности здесь:

http://msdn.microsoft.com/en-us/library/system.io.file.getlastaccesstime.aspx

По существу использовать цикл, который peroidically проверки.

Проблема с этим решением заключается в том, что из документации MSDN «Этот метод может возвращать неточное значение, поскольку он использует собственные функции, значения которых не могут постоянно обновляться операционной системой».

+0

спасибо, это можно рассматривать как один из вариантов, но мне нужно надежное решение, чтобы действовать, это может сильно потерпеть неудачу. – Bartu

+0

Это может быть ваше лучшее решение, потому что Windows не всегда обновляет значение. Вероятно, гарантированный способ заключается в том, чтобы зацепиться прямо перед чтением из файловой системы (неизвестность неизвестна). –

+0

проверял его, похоже, что функция lastAcessTime вообще не работает. Но в любом случае, спасибо за вашу идею. – Bartu