Вопрос Как перемещать папки?

Хамик

Старожил
Подскажите как перемещать папки с содержимым (файлы, подпапки)?
 

Adil

Старожил
Хамик, если вы имели в виду бэкап файлов:
Код:
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UninstallFilesDir={app}\Mod Uninstall

[Code]
procedure CopyFiles(FromPlace, ToPlace: String);
var
    ResultCode: Integer;
begin
    Exec('xcopy.exe', '/E /C /H /R /Y /F /I ' + AddQuotes(FromPlace) + ' ' + AddQuotes(ToPlace), ExpandConstant('{app}'), SW_HIDE, ewWaitUntilTerminated, ResultCode);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep = ssInstall) then
begin
    WizardForm.ProgressGauge.Hide;
    WizardForm.StatusLabel.Caption:='Создание резервных копий файлов...';
    CopyFiles(ExpandConstant('{app}') + '\Profiles\V\Achievements\Achievements.txt', ExpandConstant('{app}') + '\BackupDir\Profiles\V\Achievements\');
    WizardForm.ProgressGauge.Show;
    WizardForm.StatusLabel.Caption:=SetupMessage(msgStatusExtractFiles);
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usPostUninstall then
  begin
    CopyFiles(ExpandConstant('{app}') + '\BackupDir\Profiles\V\Achievements\Achievements.txt', ExpandConstant('{app}') + '\Profiles\V\Achievements\');
    DelTree(ExpandConstant('{app}\BackupDir'), True, True, True);
  end;
end;
 

Krinkels

Он где то тут
Администратор
Тут либо использовать апи, либо писать свой плагин. Хотя может такой кто то и написал, но я не встречал
 

Хамик

Старожил
Krinkels, судя из этого (справка nsis)
Копирование файлов
Перевод справки NSIS => CopyFiles
Создание директории
Перевод справки NSIS => CreateDirectory
Переименование/перемещение файлов
Перевод справки NSIS => Rename
Удаление директории
Перевод справки NSIS => RMDir
должно быть так
Код:
Rename $EXEDIR\App\IFX $LOCALAPPDATA
Rename $EXEDIR\App\Set\IFX $APPDATA
но не работает перемещение...
 

Krinkels

Он где то тут
Администратор
Ну это как бы переименование, а не перемещение.

Получается что то типа такого, стандартными средствами:
CreateDirectory - создаем нужную папку
CopyFiles - копируем туда необходимые файлы
RMDir - удаляем ненужную папку
 

Хамик

Старожил
Krinkels, наверное так и придется сделать. И еще вопрос: Как указать папку ProgramData?
 

Krinkels

Он где то тут
Администратор
SetShellVarContext all
DetailPrint $APPDATA

Попробуй так, должно вывести путь к ProgramData
 

Хамик

Старожил
Krinkels, как здесь указать programdata
Код:
CopyFiles "$EXEDIR\Data\IFX\*.*" "здесь путь к programdata\IFX"
 

Cyberworm

Новичок
Хамик, если вы имели в виду бэкап файлов:
Код:
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UninstallFilesDir={app}\Mod Uninstall

[Code]
procedure CopyFiles(FromPlace, ToPlace: String);
var
    ResultCode: Integer;
begin
    Exec('xcopy.exe', '/E /C /H /R /Y /F /I ' + AddQuotes(FromPlace) + ' ' + AddQuotes(ToPlace), ExpandConstant('{app}'), SW_HIDE, ewWaitUntilTerminated, ResultCode);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep = ssInstall) then
begin
    WizardForm.ProgressGauge.Hide;
    WizardForm.StatusLabel.Caption:='Создание резервных копий файлов...';
    CopyFiles(ExpandConstant('{app}') + '\Profiles\V\Achievements\Achievements.txt', ExpandConstant('{app}') + '\BackupDir\Profiles\V\Achievements\');
    WizardForm.ProgressGauge.Show;
    WizardForm.StatusLabel.Caption:=SetupMessage(msgStatusExtractFiles);
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usPostUninstall then
  begin
    CopyFiles(ExpandConstant('{app}') + '\BackupDir\Profiles\V\Achievements\Achievements.txt', ExpandConstant('{app}') + '\Profiles\V\Achievements\');
    DelTree(ExpandConstant('{app}\BackupDir'), True, True, True);
  end;
end;
В NSIS аналог этой функции будет выглядеть примерно так.
C++:
//Перемещение
!macro BackupFile FILE_DIR FILE BACKUP_TO
 IfFileExists "${BACKUP_TO}\*.*" +2
  CreateDirectory "${BACKUP_TO}"
 IfFileExists "${FILE_DIR}\${FILE}" 0 +2
  Rename "${FILE_DIR}\${FILE}" "${BACKUP_TO}\${FILE}"
!macroend
//Восстановление
!macro RestoreFile BUP_DIR FILE RESTORE_TO
 IfFileExists "${BUP_DIR}\${FILE}" 0 +2
  Rename "${BUP_DIR}\${FILE}" "${RESTORE_TO}\${FILE}"
!macroend

//Пример для секции установки
!insertmacro BackupFile "$INSTDIR\Data\Win32\loctext" "en.toc" "$INSTDIR\Backup"
//Пример для секции удаления
!insertmacro RestoreFile "$INSTDIR\Backup" "en.toc" "$INSTDIR\Data\Win32\loctext"
 
Сверху