Inno Setup: copia carpetas, subcarpetas y archivos de forma recursiva en la sección Código
inno-setup pascalscript (1)
Para copiar un directorio de forma recursiva, use programáticamente:
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;
Agregue cualquier filtro que necesite.
Mira cómo
.
y
..
se filtran.
Para ver un ejemplo de uso, vea mis respuestas a las preguntas:
- Copiar archivos ocultos en Inno Setup
- ¿Cómo guardar una carpeta cuando el usuario confirma la desinstalación? (Configuración Inno) .
¿Hay alguna forma de navegar y copiar / mover recursivamente todos los archivos y subdirectorios de un directorio dentro de la sección de código?
(
PrepareToInstall
)
Necesito ignorar un directorio específico, pero usando
xcopy
ignora todos los directorios
/default/
, por ejemplo, y necesito ignorar solo un específico.
La sección
Files
se ejecuta más adelante cuando sea necesario.