Как программно определить, какая программа поймала мой файл - PullRequest
4 голосов
/ 29 марта 2011

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

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

1 Ответ

3 голосов
/ 29 марта 2011

Вы обнаруживаете это по IOException, которое вы получаете, когда пытаетесь открыть файл.Это неизбежное зло в многозадачной операционной системе, потому что нет надежного способа реализовать метод File.IsLocked ().Windows не имеет функции API для этого.Потому что, если такая функция возвращает false, другой процесс может прервать вашу программу и заблокировать файл.Когда вы вернете процессор, вы обнаружите, что файл все равно заблокирован.Это называется многопоточность.

Итак, откройте файл, скажем, конструктором FileStream.Передайте FileShare.ReadWrite, если вы хотите читать из файла, который записывается другим процессом.Вы должны разрешить совместное использование ReadWrite, другой процесс уже получил право на запись.Ловите IOException, которое вы можете получить, вам придется повторить попытку «позже».Расскажите об этом пользователю, она, вероятно, будет знать, что делать, чтобы помочь вам.Как и при закрытии другой программы.

Кстати, Windows не предоставляет никакого способа узнать, какой другой процесс заблокировал файл.Для этого есть утилиты, такие как утилита SysInterals 'Handle.Он обрабатывает недокументированные внутренние структуры ядра с динамически устанавливаемым драйвером устройства.Ничего, что бы ты хотел решить сам.

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