Inno Setup: копировать папки, подпапки и файлы рекурсивно в разделе кода
Есть ли способ просматривать и рекурсивно копировать / перемещать все файлы и подкаталоги каталога в разделе кода? (PrepareToInstall
)
Мне нужно игнорировать конкретный каталог, но с помощью xcopy
игнорирует все каталоги /default/
Например, и мне нужно игнорировать только конкретные.
Files
раздел выполняется позже, когда это необходимо.
1 ответ
Решение
Для рекурсивного копирования каталога программно используйте:
procedure DirectoryCopy(SourcePath, DestPath: string);
var
FindRec: TFindRec;
SourceFilePath: string;
DestFilePath: string;
begin
if FindFirst(SourcePath + '\*', FindRec) then
begin
try
repeat
if (FindRec.Name <> '.') and (FindRec.Name <> '..') then
begin
SourceFilePath := SourcePath + '\' + FindRec.Name;
DestFilePath := DestPath + '\' + FindRec.Name;
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
if FileCopy(SourceFilePath, DestFilePath, False) then
begin
Log(Format('Copied %s to %s', [SourceFilePath, DestFilePath]));
end
else
begin
Log(Format('Failed to copy %s to %s', [SourceFilePath, DestFilePath]));
end;
end
else
begin
if DirExists(DestFilePath) or CreateDir(DestFilePath) then
begin
Log(Format('Created %s', [DestFilePath]));
DirectoryCopy(SourceFilePath, DestFilePath);
end
else
begin
Log(Format('Failed to create %s', [DestFilePath]));
end;
end;
end;
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end
else
begin
Log(Format('Failed to list %s', [SourcePath]));
end;
end;
Добавьте любую фильтрацию, которая вам нужна. Посмотрите, как .
а также ..
фильтруются.
Пример использования смотрите в моих ответах на вопросы: