powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка 32: Процесс не может получить доступ к файлу, так как этот файл занят другим ...
10 сообщений из 10, страница 1 из 1
Ошибка 32: Процесс не может получить доступ к файлу, так как этот файл занят другим ...
    #40069078
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте,

При копировании файла с помощью CopyFileEx, CopyFile иногда возникает ошибка вида:
Code 32: Процесс не может получить доступ к файлу, так как этот файл занят другим процессом

Как я понял, никто не застрахован от такой ошибки, которая возникает время от времени, как-то через раз. Есть подозрение, что в момент обращения к файлу его блокирует антивирусник.

Можно ли из программы Delphi узнать, какой сторонний процесс блокирует копируемый файл (ведь Far Manager как-то это определяет и показывает)? Хотелось бы из Delphi это узнать и показать пользователю имя процесса, который блокирнул файл.

Заранее благодарен.
...
Рейтинг: 0 / 0
Ошибка 32: Процесс не может получить доступ к файлу, так как этот файл занят другим ...
    #40069081
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Ошибка 32: Процесс не может получить доступ к файлу, так как этот файл занят другим ...
    #40069098
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmoker,

Спасибо за пример, хотя мне кажется он бесполезен из-за главного недостатка - Этот API рассчитывает на то, что программа, заблокировавшая файл, реализует и зарегистрирует специальный интерфейс. Если же приложение не озаботится этой задачей, то вы не сможете использовать этот метод.

Я уверен, что 95% программ никакой специальный интерфейс не реализуют.

Код: pascal
1.
2.
3.
4.
5.
var FileInfo: IFileIsInUse;
begin
  FileInfo:=GetFileInUseInfo('G:\Programs\Telegram\tdata\working');
  здесь FileInfo=nil
end;


Проверял на 2-х файлах. На одном из них Far Manager выдал конкретно ID и имя процесса, который заблокировал указанный файл, а предложенная функция GetFileInUseInfo возвращает nil (не проходит условие while (enumMoniker.Next(1, enumIndex, nil) = S_OK) - возвращает число 1)

Видимо, есть какой-то другой способ узнать имя или ID процесса, который блокирует файл.
...
Рейтинг: 0 / 0
Ошибка 32: Процесс не может получить доступ к файлу, так как этот файл занят другим ...
    #40069103
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Ошибка 32: Процесс не может получить доступ к файлу, так как этот файл занят другим ...
    #40069109
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное спасибо!
Это то, что надо.
Я конечно переделал под себя этот код, но работает отлично, тестировал на разных ОС семейства Windows.
Задача решена.
...
Рейтинг: 0 / 0
Ошибка 32: Процесс не может получить доступ к файлу, так как этот файл занят другим ...
    #40069160
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще такой вопрос.
В Windows 2003 server и Windows XP программа перестала запускаться - ругается на отсутствие 'Rstrtmgr.dll'. Видимо, Restart Manager еще не существовал во времена XP. В моем модуле при указании внешних ф-ций QueryFullProcessImageName, RmStartSession и др. указана
Код: pascal
1.
external 'Rstrtmgr.dll';


Как сделать, чтобы для WinXP вообще не работал данный unit? Соответственно, связанных с этим функций в WinXP я вызывать не буду.

Я конечно условием IF могу проверить, в какой версии Windows запущена программа, но dll пытается подгрузить еще при загрузке exe-файла, когда инициализируются все модули.
...
Рейтинг: 0 / 0
Ошибка 32: Процесс не может получить доступ к файлу, так как этот файл занят другим ...
    #40069161
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Динамическая загрузка с помощью LoadLibrary тебе в руки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка 32: Процесс не может получить доступ к файлу, так как этот файл занят другим ...
    #40069199
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52
Как сделать, чтобы для WinXP вообще не работал данный unit? Соответственно, связанных с этим функций в WinXP я вызывать не буду.

Если версия дельфей позволяет, можно использовать отложенную загрузку:
Код: pascal
1.
procedure someproc(astring: pwidechar); stdcall; external 'somelib.dll' name 'someproc' delayed;
...
Рейтинг: 0 / 0
Ошибка 32: Процесс не может получить доступ к файлу, так как этот файл занят другим ...
    #40069206
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Спасибо огромное! Это как раз то, что нужно!
Теперь всё отлично работает.
...
Рейтинг: 0 / 0
Ошибка 32: Процесс не может получить доступ к файлу, так как этот файл занят другим ...
    #40069215
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
m52
Kazantsev Alexey,

Спасибо огромное! Это как раз то, что нужно!
Теперь всё отлично работает.


LoadLibrary гораздо более правильно
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка 32: Процесс не может получить доступ к файлу, так как этот файл занят другим ...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]