"Неизвестный идентификатор FileOpen" при попытке обнаружить заблокированный файл в коде Inno Setup

Я пытаюсь использовать FileOpen в коде Inno Setup, однако компилятор Inno Setup продолжает выдавать мне следующую ошибку.

Неизвестный идентификатор 'FileOpen'

Вот пример кода:

function IsFileLocked(pathFile : string) : Boolean;
var
  hFile : integer;
begin
  Result := true;

  hFile := FileOpen(pathFile);
  if (0 <> hFile) then
    begin
      Result := false;

      { Since ISPP 1.2, Inno Setup automatically frees resources, so FileClose() is obsolete. }
      { http://www.jrsoftware.org/ispphelp/index.php?topic=fileclose }
    end;
end;

в отличие от FileClose метод, FileOpen не устарел.

FileOpen

Я сделал поиск в Google, но ничего не произошло. Я знаю, что Inno Setup использует Pascal Script, а не Pascal, но FileOpen функция является частью Inno Setup Preprocessor: Functions,

Примечание: сегодня утром я обновил до последней версии компилятора (5.6.1a) и до последней версии Inno Script Studio (2.3.0), та же проблема.

Я вижу раздел Other Information > ISPPBuiltins.iss, Я попытался добавить строку:

[Code]
#include <ISPPBuiltins.iss>

Добавление #include утверждение, генерирует ошибку

ISPPBuiltins.iss Строка 1: Столбец 1: Ожидается "НАЧАЛО".

Добавление в ISPPBuiltins.iss к проекту как способ решения FileOpen проблема не имеет смысла, так как открытие файла в текстовом редакторе показывает, что FileOpen там не существует. Я не вижу ни одного встроенного файла. Может показаться, что компилятору не нравится "; BEGIN..." в файле, но я отвлекся. Так много для этой мысли.

Мысли о том, как решить мою проблему неизвестного идентификатора с FileOpen?

1 ответ

Решение

FileOpen является функцией препроцессора. Вы не можете использовать его в коде Pascal Script, который имеет свою собственную библиотеку функций.

  • Для быстрого и грязного решения используйте LoadStringFromFile,

  • Для более чистого решения импортируйте CreateFile Функция WinAPI.

Другие вопросы по тегам