Как понять файл занят другой программой

Имеется текстовый файл, который довольно часто обновляется сторонней программой. Мне нужно импортировать его в Memo. Соответственно, возникает ошибка: “Процесс не может получить доступ к файлу, так как этот файл занят другим процессом”. Каким образом можно понять, отрыт ли в данный момент файл или нет?
Код пока такой:

procedure TForm1.Button1Click(Sender: TObject); begin trig:=true; repeat Memo1.Clear; Memo1.Lines.LoadFromFile(‘C:1.txt’); sleep(100); application.ProcessMessages; until trig=false; end;
Регистрация: 28.01.2009
Сообщений: 20,999

try except применить?

а вообще стоит попробовать открыть через TFileStream с разрешенным шарингом, авось откроется.

Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Пользователь
Регистрация: 01.05.2010
Сообщений: 29

Ошибка не в дельфи, а в винде. Файл я не открываю, а сразу загружаю в Memo. Мне бы хотелось какое-нибудь условие наложить, мол, если файл занят, то повторить еще раз)

Как удалить программу открытую в другой программе

Участник клуба
Регистрация: 19.12.2007
Сообщений: 1,100
открыть файл для чтения, а потом уже загружать в Мемо
На форуме: Помогаю за спасибо
ICQSkype: Это моё личное время .
Белик Виталий 🙂
Регистрация: 23.07.2007
Сообщений: 57,792

Ошибка не в дельфи, а в винде.

Ошибка в непонимании советов.
try except позволит тебе обработать исключение при открытии файла — это именно то над чем стоит подумать.

I’m learning to live.
Регистрация: 13.08.2009
Сообщений: 2,581

Каким образом можно понять, отрыт ли в данный момент файл или нет?
Читайте также:
Программа чтобы ноутбук видел телефон

Надёжно — нельзя никаким иным способом, кроме как попытаться открыть файл.

Имеется текстовый файл, который довольно часто обновляется сторонней программой.

Читай про режимы открытия. Возможно поможет. Но только «возможно».

Ошибка не в дельфи, а в винде

Ошибки здесь нет.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Источник: www.programmersforum.ru

Файл занят другой программой: что делать и как решить проблему?

Не всегда возможно легко получить доступ к файлу на компьютере. В некоторых случаях пользователю может показаться, что доступ к файлу заблокирован. Отказ в доступе к файлу может быть вызван тем, что файл занят другой программой и его нельзя открыть в данный момент. Часто такая проблема встречается при открытии изображений, pdf-файлов или файлов, которые используются в среде программирования. Как решать эту проблему и получить доступ к нужному файлу?

файл занят другой программой

Что делать, если файл занят или используется

ActivityMonitor

При открытии файла той или иной программой, доступ к нему временно блокируется. Обычно блокировка длится лишь до тех пор, пока содержимое файла не будет прочитано и перенесено в оперативную память, что как правило не занимает много времени, а после этого доступ к файлу может получить любое другое приложение или сервис, чтобы сработать по той же самой схеме “заблокировать – прочитать – разблокировать”. Однако, бывают случаи, когда программа сохраняет блокировку даже после прочтения файла. Такое может произойти как по ошибке, так и из-за специфики работы самой программы. В любом случае, дальнейшее взаимодействие с этим файлом будет невозможно, а попытки его редактировать, удалить, перенести или открыть в другой программе будут приводить к возникновению различных сообщений о том, что искомый файл заблокирован, недоступен, используется или даже, что у вас недостаточно прав для доступа к нему.

Читайте также:
Как установить программу для всех пользователей компьютера

Самый простой способ решить эту проблему – завершить работу приложения, которое препятствует дальнейшему взаимодействию с файлом. Но вычислить, что именно это за программа, может быть довольно непросто, ведь “виновным” может оказаться и какой-нибудь фоновый процесс. Справиться с этой задачей можно при помощи Терминала.

lsofmyfile

Команда “lsof” выводит на экран список всех файлов, которые на данный момент открыты в той или иной программе. Поскольку список может быть довольно длинным, а нам нужна информация только по одному файлу, можно применить фильтр по его имени. Для этого запустите Терминал из папки “Утилиты” и введите команду lsof | grep filename где filename – имя искомого файла.

В качестве альтернативы можно воспользоваться скриптом “fuser” входящим в состав OS X. Этот скрипт, также использует команду “lsof”, но его вывод более прост для восприятия. Скрипт проверяет, используется ли в данный момент указанный вами файл, и, если используется, то каким именно процессом.

fusermyfile1

Запустите Терминал из папки “Утилиты” и введите команду fuser /path/to/file где /path/to/file – полный путь к искомому файлу. Для того чтобы его ввести, достаточно просто перетащить нужный файл в окно Терминала.

SendSignal

После того как нам стал известен ID процесса можно запустить Мониторинг ресурсов и определить, какой программе он соответствует (для упрощения поисков можно использовать сортировку по PID, нажав на заголовок соответствующей колонки). Если искомый ID присвоен пользовательской программе, а не какому-нибудь служебному сервису, в первую очередь стоит попробовать завершить её работу штатными средствами, через графический интерфейс.

Если этого сделать не удается можно последовательно опробовать несколько вариантов, доступных в окне Мониторинга системы. Выделите нужный процесс и перейдите в меню Вид – Послать сигнал процессу. Затем выберите в ниспадающем меню один из сигналов, описанных ниже, и нажмите кнопку “Отправить”. В качестве альтернативы вы, опять же, можете воспользоваться Терминалом.

Читайте также:
Лучшие программы по пауэрлифтингу без экипировки

1. Разрыв подключения (SIGHUP)

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru