Вопрос Как перенести файлы

Stas

Участник
подскажите как переместить и заменить существующие папки и файлы после установки ?
то есть при выборе компонента перенести все файлы из папки GAME\_RUS в папку GAME\DATA и удалить пустую папку GAME\_RUS
 

Crachlow

Старожил
Exec(ExpandConstant('{cmd}'), ExpandConstant('cmd /c move /y GAME\_RUS\*.* GAME\DATA '), ExpandConstant('{app}'), SW_HIDE, ewWaitUntilTerminated, ResultCode);
примерно так
 

Stas

Участник
Exec(ExpandConstant('{cmd}'), ExpandConstant('cmd /c move /y GAME\_RUS\*.* GAME\DATA '), ExpandConstant('{app}'), SW_HIDE, ewWaitUntilTerminated, ResultCode);
примерно так
if IsComponentSelected('text\eng') then Exec(ExpandConstant('{cmd}'), ExpandConstant('cmd /c move /y GAME\_RUS\*.* GAME\DATA '), ExpandConstant('{app}'), SW_HIDE, ewWaitUntilTerminated, ResultCode);

выдает ошибку ResultCode
 

Вложения

tihiy_don

Старожил
@Stas, попробуйте объявить переменную в процедуре:

code_language.pascal:
var

ResultCode: integer;
 
Последнее редактирование:

Andreo Fadio

Старожил
подскажите как переместить и заменить существующие папки и файлы после установки ?
Код:
[Code]
const
  Backup_COPY = 1;
  Backup_MOVE = 2;

procedure MoveDir(BaseDir, DestDir, SubDirs, Filename: String; Flag: DWORD);
var
  FSR: TFindRec;
  file1, file2, sub: String;
begin
  Log(AddBackslash(BaseDir)+Addbackslash(SubDirs)+Filename);
  if FindFirst(AddBackslash(BaseDir)+Addbackslash(SubDirs)+Filename, FSR) then begin
    try
      repeat
        if (FSR.Name='.')or(FSR.Name='..') then Continue;
        if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY <> 0 then begin
          if SubDirs='' then sub:=FSR.Name else
            sub:=AddBackslash(SubDirs)+FSR.Name;
          MoveDir(BaseDir, DestDir, sub, Filename, Flag);
        end else
        begin
          file1:=AddBackslash(BaseDir)+Addbackslash(SubDirs)+FSR.Name;
          file2:= file1;
          StringChange(file2, BaseDir, DestDir);
          ForceDirectories(ExtractFilePath(File2));
          if Flag = Backup_MOVE then begin
           if FileExists(file2) then DeleteFile(file2);
           RenameFile(PAnsiChar(File1), PAnsiChar(File2));
          end else FileCopy(PAnsiChar(File1), PAnsiChar(File2), false);
        end;
      until not FindNext(FSR);
    finally
      FindClose(FSR);
    end;
  end;
end;

procedure CopyMoveDir(FromDir, DestDir, Files: String; idx: Smallint);
var
  tmp, Filename, sub, name, func: String; flag: DWORD;
  k: Integer;
begin
  tmp:= Files;
  ForceDirectories(DestDir);
  repeat
    k:= Pos(',', tmp);
    if k=0 then k:= Length(tmp)+1;
    Filename:= Trim(Copy(tmp, 1, k-1));
    Delete(tmp, 1, k);
    func:= copy(Filename, 1, 5);
    if (Lowercase(func)='copy:')or(Lowercase(func)='move:') then begin
      Delete(Filename, 1, 5);
      case Lowercase(func) of
        'move:': Flag:= Backup_MOVE;
        'copy:': Flag:= Backup_COPY;
      end;
    end else
      Flag:= Backup_MOVE;
    name:= Trim(ExtractFilename(Filename));
    sub:= Trim(ExtractFilePath(Filename));
    MoveDir(FromDir, DestDir, sub, name, flag);
    tmp:= Trim(tmp);
  until tmp='';
  RemoveDir(FromDir);
  if (idx = 1) and DirExists(FromDir) then
   DelTree(FromDir, True, True, True);
end;

//--- для перемещения всех файлов использовать: move:*.*
//--- для копирования всех файлов использовать: copy:*.*
//--- цифра 1 в конце процедуры, указывает на удаление папки откуда перемещаете\копируете
//CopyMoveDir(ExpandConstant('{src}\backup'), ExpandConstant('{src}\backup22'), 'move:*.*', 1);

ваша команда для выполнения нужной задачи:
Код:
CopyMoveDir(ExpandConstant('{app}\GAME\_RUS'), ExpandConstant('{app}\GAME\DATA'), 'move:*.*', 1);
далее сами привяжите к выполнению по компоненту
 
  • Like
Реакции: Stas

Stas

Участник
Код:
[Code]
const
  Backup_COPY = 1;
  Backup_MOVE = 2;

procedure MoveDir(BaseDir, DestDir, SubDirs, Filename: String; Flag: DWORD);
var
  FSR: TFindRec;
  file1, file2, sub: String;
begin
  Log(AddBackslash(BaseDir)+Addbackslash(SubDirs)+Filename);
  if FindFirst(AddBackslash(BaseDir)+Addbackslash(SubDirs)+Filename, FSR) then begin
    try
      repeat
        if (FSR.Name='.')or(FSR.Name='..') then Continue;
        if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY <> 0 then begin
          if SubDirs='' then sub:=FSR.Name else
            sub:=AddBackslash(SubDirs)+FSR.Name;
          MoveDir(BaseDir, DestDir, sub, Filename, Flag);
        end else
        begin
          file1:=AddBackslash(BaseDir)+Addbackslash(SubDirs)+FSR.Name;
          file2:= file1;
          StringChange(file2, BaseDir, DestDir);
          ForceDirectories(ExtractFilePath(File2));
          if Flag = Backup_MOVE then begin
           if FileExists(file2) then DeleteFile(file2);
           RenameFile(PAnsiChar(File1), PAnsiChar(File2));
          end else FileCopy(PAnsiChar(File1), PAnsiChar(File2), false);
        end;
      until not FindNext(FSR);
    finally
      FindClose(FSR);
    end;
  end;
end;

procedure CopyMoveDir(FromDir, DestDir, Files: String; idx: Smallint);
var
  tmp, Filename, sub, name, func: String; flag: DWORD;
  k: Integer;
begin
  tmp:= Files;
  ForceDirectories(DestDir);
  repeat
    k:= Pos(',', tmp);
    if k=0 then k:= Length(tmp)+1;
    Filename:= Trim(Copy(tmp, 1, k-1));
    Delete(tmp, 1, k);
    func:= copy(Filename, 1, 5);
    if (Lowercase(func)='copy:')or(Lowercase(func)='move:') then begin
      Delete(Filename, 1, 5);
      case Lowercase(func) of
        'move:': Flag:= Backup_MOVE;
        'copy:': Flag:= Backup_COPY;
      end;
    end else
      Flag:= Backup_MOVE;
    name:= Trim(ExtractFilename(Filename));
    sub:= Trim(ExtractFilePath(Filename));
    MoveDir(FromDir, DestDir, sub, name, flag);
    tmp:= Trim(tmp);
  until tmp='';
  RemoveDir(FromDir);
  if (idx = 1) and DirExists(FromDir) then
   DelTree(FromDir, True, True, True);
end;

//--- для перемещения всех файлов использовать: move:*.*
//--- для копирования всех файлов использовать: copy:*.*
//--- цифра 1 в конце процедуры, указывает на удаление папки откуда перемещаете\копируете
//CopyMoveDir(ExpandConstant('{src}\backup'), ExpandConstant('{src}\backup22'), 'move:*.*', 1);

ваша команда для выполнения нужной задачи:
Код:
CopyMoveDir(ExpandConstant('{app}\GAME\_RUS'), ExpandConstant('{app}\GAME\DATA'), 'move:*.*', 1);
далее сами привяжите к выполнению по компоненту
спасибо большое
 
Сверху