Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ожидание завершения процесса, блокировавшего файл

38K
13 ноября 2008 года
Nameless One
6 / / 02.07.2008
Здравствуйте!
Возникла проблема при использовании FileSystemWatcher: в общем случае событие создания файла генерится раньше, чем запись была завершена. Пробовал использовать как Changed, так и Created в сочетании с различными значениями NotifyFilter -- безрезультатно (либо генерится слишком много событий, причем по большей части тоже до окончания записи в файл, либо наооборот какие то файлы проскакивают "незамеченными"). Из МСДН'а *вроде бы* понял, что такая ситуацию нормальна, т.к. в общем случае неизвестно как именно произвольное приложение работает с файлом. Да, вообще стоит задача считать свежесозданный файл.
Из этого всего возникает резонный вопрос: а как дождаться завершения процесса, который на текущий момент заблокировал файл? Искал на эту тему, но честно говоря ничего толком не нашел (тока в одном месте увидел пару общих слов на тему, что это десскать очень сложно, лучше даже не заморачиваться, что кажется мне не очень правдоподобным)

З.Ы. Допускаю, что дело в моих кривых, не умеющих работать с FileSystemWatcher, руках и в этом случае буду рад услышать более простое и очевидное решение. Однако даже в этом случае поставленный вопрос меня весьма заинтересовал!
З.З.Ы. На текущий момент 1 очень корявое решение таки имеется - хэндлить соответствующий Exception до победного конца с неким делэем, но это неэффективно и небезопасно!
5
14 ноября 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: Nameless One
как дождаться завершения процесса, который на текущий момент заблокировал файл?

Периодически пытаться открыть файл с монопольным доступом. Например раз в секунду делать попытку.

38K
19 ноября 2008 года
Nameless One
6 / / 02.07.2008
Спасибо за ответ!
Собственно к такому варианту я и пришел... Однако он не лишен недостатков (например выбор интервала ожидания) и мне казалось что гораздо более правильным и красивым решением будет дождаться процесса который этот файл заблочил. Надо понимать, овчинка не стоит выделки?
5
19 ноября 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: Nameless One
Надо понимать, овчинка не стоит выделки?

В общем случае если процесс заблокировал файл, еще не значит, что он может завершиться в обозримый промежуток времени и смысла дожидаться именно завершения процесса нет. Вдруг это тот же explorer.exe. Когда он завершится? С завершением сессии пользователя? А если он логофнется через неделю или месяц?

Дождаться освобождения хэндла это тот же самый алгоритм опроса - удалился ли хэндл из таблицы в процессе. А вдруг файл был с общим доступом по чтению открыт несколькими процессами? Что будем искать хэндлы по таблицам ВСЕХ процессов? Но для этого нужен уровень привелегий как минимум администратора.
Делайте выводы.

42K
12 мая 2009 года
myPhpGirl
1 / / 06.08.2008
????????????????????? ???????????????????—— ????????????????????? ??????????????????? “?????”??????“????????—— ??????????” ?????????????????? ???????????????????? ?????????——????????? ????????——???????????—— ???????????????????—— ?????????????? ??????????????????? ?????????????——?????? ????????????????? “??????????????——? ?????????????????—— ??????????” ---------------------------------------------------------------------------------------------------------------------------------------------?????????????3gp?????????????????????????
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог