Delphi: Проверьте, используется ли файл
Я хочу писать/удалять файлы, но иногда я получаю сбой, если файл используется другой программой. Как проверить, открыт ли файл другим процессом или я могу открыть его для записи?
5 ответов
проблема в том, что между тем, как вы проверяете, можете ли вы получить эксклюзивный доступ и открыть файл, что-то еще получает эксклюзивный доступ к файлу, и вы все равно получаете исключение.
единственный способ доказательства дурака, чтобы увидеть, если вы можете получить эксклюзивную блокировку на файл, чтобы попытаться получить эксклюзивную блокировку на файл, если вы получите его у вас есть.
Если нет, вы поймаете исключение, и либо
- иди сделай что-нибудь иначе!--8-->
- подождите немного и повторите попытку
Это одна из жизненных ситуаций, где лучше просить прощения, чем разрешения :)
существует новый способ получить происхождение блокировки файлов для Vista и здесь: http://www.remkoweijnen.nl/blog/2011/01/03/cannot-access-files-but-need-the-origin/
UserMode: Лучший способ записи в заблокированный файл-попросить пользователя закрыть его в другом процессе. В пакетных процессах вы должны игнорировать такой файл и регистрировать проблему. Предоставление имени другого процесса-очень хороший способ найти решение для пользователя.
Не уверен, на каком языке программирования вы хотите проверить, можете ли вы писать в файл. На Java,java.Ио.Файл.canWrite () смогите сделать работу для вас.
общие:
в UNIX-подобной ОС вы можете использовать lsof.
Если вы хотите увидеть, какая программа содержит дескриптор вашего файла, используйте Контролировать Процесс (загрузка из MicroSoft).
этот инструмент имеет интерфейс командной строки, поэтому вы можете использовать интерфейс сценариев вашего языка (например java.lang.Process
) для запуска инструмента и отображения полезного сообщения об ошибке.
IsFileInUse, как указано в http://delphi.about.com/cs/adptips1999/a/bltip0999_3.htm