Препроцессор Inno Setup: FindFirst

Прототип функции

int FindFirst(str, int)

Описание

Выполняет поиск файла в указанной папке согласно заданному имени (первый параметр) и атрибуту файла (второй параметр). Если файл найден, то возвращает его дескриптор, который должен быть использован в последующих вызовах функций FindGetFileName, FindNext и FindClose. В противном случае функция вернёт значение 0.

Первый параметр (str) устанавливает маску имени папки/файла, включая символы подстановки. Например, строка вида '.\*.*' определяет все файлы в текущем каталоге.

Второй параметр (int) устанавливает атрибут файлов, которые должны быть включены в поиск помимо обычных файлов. Выберите необходимый атрибут или соответствующую ему константу, которые определены в файле ISPPBuiltins.iss:

faReadOnly файлы только для чтения 0x00000001
faHidden скрытые файлы 0x00000002
faSysFile системные файлы 0x00000004
faVolumeID файлы ID-тома 0x00000008
faDirectory файлы каталога 0x00000010
faArchive архивные файлы 0x00000020
faSymLink файлы символьных ссылок 0x00000040
faAnyFile любые файлы 0x0000003F

Атрибуты можно комбинировать между собой, используя логическую операцию "ИЛИ" как для значений, так и для констант. Например, для поиска также скрытых файлов и только для чтения, укажите в качестве второго параметра faReadOnly | faHidden.

Пример

[Files]
#define FindHandle
#define FindResult
#define Mask "*.pas"

#sub ProcessFoundFile
  #define FileName FindGetFileName(FindHandle)
  #if LowerCase(Copy(FileName, 1, 4)) == "ispp"
    FileName: {#FileName}; DestDir: {app}\ispp
  #else
    FileName: {#FileName}; DestDir: {app}
  #endif
#endsub

#for {FindHandle = FindResult = FindFirst(Mask, 0); FindResult; \
      FindResult = FindNext(FindHandle)} ProcessFoundFile
#if FindHandle
  #expr FindClose(FindHandle)
#endif

См. также:

define
sub
if