powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как определить, что файл DLL занят?
18 сообщений из 18, страница 1 из 1
Как определить, что файл DLL занят?
    #39548018
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
При запуске приложения определяю контрольную сумму файла DLL, после чего первое приложение начинает использовать DLL.
При запуске второго экземпляра программы второй экземпляр начинает определять контрольную сумму этой-же DLL. Выскакивает ошибка I/O error 32.

Пробовал проверять занятость файла, но при AssignFile(AFile,AFileName); во втором экземпляре выскакивает эта-же ошибка.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
procedure TDM1.ActDLLExistsExecute(Sender: TObject); //Проверка наличия DLL из списка
    function isFileOpen( var f: File ) : boolean;
    begin
       with TFileRec(f) do
         Result := (Handle<>0) and (Mode<>fmClosed);
    end;
var fn: string;  Ffs: File;
begin
  QDLLFiles.Open;
  while not QDLLFiles.Eof do
    begin
      fn:=DM1.QDLLFilesGoal.AsString+DM1.QDLLFilesName.AsString;
      if not FileExists(fn) then begin  
                                   DM1.QDLLFilesBODY.SaveToFile(fn); 
                                 end
                            else begin
                                 AssignFile(Ffs,fn); //Здесь во втором экземпляре ошибка I/O error 32  
                                 Reset(Ffs);
                                 if isFileOpen(Ffs) then //Если этой строчки нет, то ошибка в GetFileCRC(fn), поскольку там тоже есть AssignFile
                                    if GetFileCRC(fn)<>DM1.QDLLFilesCRC.Value then begin
                                                                                     DM1.QDLLFilesBODY.SaveToFile(fn);  
                                                                                   end;

                                 CloseFile(Ffs);
                              end;
      QDLLFiles.Next;
    end;
  QDLLFiles.Close;
end;
...
Рейтинг: 0 / 0
Как определить, что файл DLL занят?
    #39548019
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zeon11,

скопировать файл dll в темп и там считать не пробовал?
...
Рейтинг: 0 / 0
Как определить, что файл DLL занят?
    #39548020
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,
Хорошая мысль, если другого решения не будет то воспользуюсь этим советом. Спасибо.
...
Рейтинг: 0 / 0
Как определить, что файл DLL занят?
    #39548027
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zeon11,

Reset, по дефолту, открывает файл в режиме чтение+запись. Вариантов решения 2:
1. Делать FileMode := 0; но это кю.
2. Работать с файлом по-человечески, либо FileOpen+FileRead либо через файловый стрим, указав, что файл открывается только для чтения (fmOpenRead Or fmShareDenyWrite).
...
Рейтинг: 0 / 0
Как определить, что файл DLL занят?
    #39548028
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zeon11andreymx,
Хорошая мысль, если другого решения не будет то воспользуюсь этим советом. Спасибо.не, плохой мой вариант
лишний раз куда-то копировать
...
Рейтинг: 0 / 0
Как определить, что файл DLL занят?
    #39548049
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexeyzeon11,

Reset, по дефолту, открывает файл в режиме чтение+запись. Вариантов решения 2:
1. Делать FileMode := 0; но это кю.
2. Работать с файлом по-человечески, либо FileOpen+FileRead либо через файловый стрим, указав, что файл открывается только для чтения (fmOpenRead Or fmShareDenyWrite).

Не вижу пути, как через TFileStream определить, что файл занят другим приложением.
Если только воспользоваться идеей andreymx'а, не заморачиваться с занятостью файла, а сразу через TFileStream вытягивать файл в безопасное место и там определять его контрольную сумму?
...
Рейтинг: 0 / 0
Как определить, что файл DLL занят?
    #39548050
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexeyzeon11,

Reset, по дефолту, открывает файл в режиме чтение+запись. Вариантов решения 2:
1. Делать FileMode := 0;
но это кю.
2. Работать с файлом по-человечески, либо FileOpen+FileRead либо через файловый стрим, указав, что файл открывается только для чтения (fmOpenRead Or fmShareDenyWrite).

До Reset 'а к сожалению не доходит, вылетает ещё на AssignFile
...
Рейтинг: 0 / 0
Как определить, что файл DLL занят?
    #39548059
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zeon11Не вижу пути, как через TFileStream определить, что файл занят другим приложением.

Не надо определять, что он занят. Надо сделать так, чтобы файл открывался даже если
занят
.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как определить, что файл DLL занят?
    #39548067
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovzeon11Не вижу пути, как через TFileStream определить, что файл занят другим приложением.

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


Так это не проблема. Как из TFileStream получить контрольную сумму файла?
...
Рейтинг: 0 / 0
Как определить, что файл DLL занят?
    #39548082
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CRC это алгоритм который подсчитывает контрольную сумму по содержимому файла.
TFileStream позволяет получить содержимое, осталось это содержимое отдать в функцию расчета CRC.

P.S. Когда уже из Delphi выпилят AssignFile и прочую мертвечину, ну или введут директиву, которая отключит (а лучше включит для совместимости) это безобразие....
...
Рейтинг: 0 / 0
Как определить, что файл DLL занят?
    #39548084
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zeon11До Reset 'а к сожалению не доходит, вылетает ещё на AssignFile
На самом деле вылетает на Reset, просто отладчик показывает строку за той, на которой произошла ошибка.
...
Рейтинг: 0 / 0
Как определить, что файл DLL занят?
    #39548104
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteКогда уже из Delphi выпилят AssignFile и прочую мертвечину, ну или введут директиву, которая отключит (а лучше включит для совместимости) это безобразие....Нафига? Кому оно мешает? А для чтения текстовых файлов так вообще ничего нет
...
Рейтинг: 0 / 0
Как определить, что файл DLL занят?
    #39548108
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zeon11Как из TFileStream получить контрольную сумму файла?

Точно так же как и из File. Разницы никакой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как определить, что файл DLL занят?
    #39548127
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zeon11, матчасть:

http://www.gunsmoker.ru/2011/10/pascal.html - см. "Общие принципы работы с файлами Pascal", "3. Далее файл открывается. Открывать файл можно в трёх режимах...", про FileMode, а также ниже - про обработку ошибок.

http://www.gunsmoker.ru/2011/11/blog-post_12.html - что надо использовать в современных программах.
...
Рейтинг: 0 / 0
Как определить, что файл DLL занят?
    #39548249
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал пока так:
В функции определения CRC между AssignFile и Reset поставил FileMode := 0;

Код: pascal
1.
2.
3.
4.
5.
.....
  AssignFile(Fi,FileName);
  FileMode := 0;
  Reset(Fi);
.......



вроде проблема решена. Спасибо.
...
Рейтинг: 0 / 0
Как определить, что файл DLL занят?
    #39548292
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В свежих средах можно еще посмотреть, чтение:
TFile.ReadAllBytes, TFile.ReadAllLines, TFile.ReadAllText
запись:
TFile.WriteAllBytes, TFile.WriteAllLines, TFile.WriteAllText, TFile.AppendText
...
Рейтинг: 0 / 0
Как определить, что файл DLL занят?
    #39548397
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zeon11вроде проблема решена. Спасибо

Застрелись.
...
Рейтинг: 0 / 0
Как определить, что файл DLL занят?
    #39548483
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmokerzeon11вроде проблема решена. Спасибо

Застрелись.

Тем не менее, спасибо за ссылки.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как определить, что файл DLL занят?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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