Случайное копирование определенного файла или запись значения в этот файл

Александр85

Новичок
Здравствуйте!
Подскажите, пожалуйста, код как можно реализовать случайное копирование определенного файла, при каждом новом запуске инсталлятора, Условно говоря у меня есть файл 1.txt, таких файлов будет 10-20-30.
Можно ли сделать так, чтобы при каждом новом запуске-установке чтобы копировался один из этих файлов в папку установки, вне зависимости ни от чего. Просто новая установка - копирование нового файла. Или же запись в этот файл определенного значения из списка который я укажу.
Суть - нужно просто чтобы информация в файле при каждой новой установке менялась или случайно или, пускай даже подряд. Первая установка - первое значение (файл), вторая установка - второй файл (значение).
Это вообще реально сделать?
Никаких задач (компонентов) для выбора пользователю не нужно, а то так бы да, я бы мог предложить пользователю выбрать один их этих файлов. )) Нет, так не надо! Надо чтобы совершенно без участия пользователя, чтобы копировался один и тот же файл в папку установки, но с разным значением или один любой из 10-20-30 файлов, которые я положу отдельно, но имя у них при копировании в папку установки должно быть одно и тоже, т.е. у меня будет 1-2-3-4-5-6-7... txt, где-то лежать до компиляции, а в конечном итоге в папке назначения (установки) должен скопироваться любой из этих файлов, но получить название 1.txt
Помогите, пожалуйста! Желательно для Юникод версии Inno Setup!
 
Последнее редактирование:

Andreo Fadio

Старожил
Или же запись в этот файл определенного значения из списка который я укажу
можно так:
Код:
[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[_Code]
var
  Lunes: Array Of String;

function GetRandomKey(FileName: String): String;
var
  ArrayLength, RandomNum: Integer;
begin
  ArrayLength:= GetArrayLength(Lunes);
  RandomNum:= Random(ArrayLength);
  Result:= Lunes[RandomNum];
end;

function InitializeSetup: Boolean;
begin
  //Устанавливаем длину списка
  SetArrayLength(Lunes, 13);
  //Задаем желаемые значения строчек
  Lunes[0]:='1';
  Lunes[1]:='2';
  Lunes[2]:='3';
  Lunes[3]:='4';
  Lunes[4]:='5';
  Lunes[5]:='6';
  Lunes[6]:='7';
  Lunes[7]:='8';
  Lunes[8]:='9';
  Lunes[9]:='10';
  Lunes[10]:='11';
  Lunes[11]:='12';
  Lunes[12]:='13';
  //Удаляем файл в который пишем значение
  if FileExists(ExpandConstant('{src}\RandomStr.txt')) then DeleteFile(ExpandConstant('{src}\RandomStr.txt'));
  //Сохраняем рандомное значение в нужный нам файл
  SaveStringToFile(ExpandConstant('{src}\RandomStr.txt'), ExpandConstant('{code:GetRandomKey}')+ #13#10, True);
  Result:= False;
end;

Такой же пример можно и под копирование файла сделать, если чутка поправить.
 

Crachlow

Старожил
можно так:
Код:
[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[_Code]
var
  Lunes: Array Of String;

function GetRandomKey(FileName: String): String;
var
  ArrayLength, RandomNum: Integer;
begin
  ArrayLength:= GetArrayLength(Lunes);
  RandomNum:= Random(ArrayLength);
  Result:= Lunes[RandomNum];
end;

function InitializeSetup: Boolean;
begin
  //Устанавливаем длину списка
  SetArrayLength(Lunes, 13);
  //Задаем желаемые значения строчек
  Lunes[0]:='1';
  Lunes[1]:='2';
  Lunes[2]:='3';
  Lunes[3]:='4';
  Lunes[4]:='5';
  Lunes[5]:='6';
  Lunes[6]:='7';
  Lunes[7]:='8';
  Lunes[8]:='9';
  Lunes[9]:='10';
  Lunes[10]:='11';
  Lunes[11]:='12';
  Lunes[12]:='13';
  //Удаляем файл в который пишем значение
  if FileExists(ExpandConstant('{src}\RandomStr.txt')) then DeleteFile(ExpandConstant('{src}\RandomStr.txt'));
  //Сохраняем рандомное значение в нужный нам файл
  SaveStringToFile(ExpandConstant('{src}\RandomStr.txt'), ExpandConstant('{code:GetRandomKey}')+ #13#10, True);
  Result:= False;
end;

Такой же пример можно и под копирование файла сделать, если чутка поправить.
var
N: Integer;
for 0 to 12 do
Lunes[N]:='{code:GetRandomKey}'
 

LexBell

Борода
Супер модератор
code_language.pascal:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

[Files]
; в папку {app} кладем файлы txt, номера должны идти подряд, начиная от нуля, во избежание ошибки
Source: "{app}\*.txt"; Flags: dontcopy

[code]
procedure CurStepChanged(CurStep: TSetupStep);
var
  s : String;
begin
  if CurStep=ssInstall then
  begin
  repeat
      Randomize;
      s:= ExpandConstant('{app}\'+IntToStr(Random(30))+'.txt'); // 30 - количество нужных файлов. не последняя цифра, а количество
    until FileExists(s); // проверяем наличие имменно этого номера и если есть, пропускаем
    ExtractFileExt(s);
  end;
end;
 

Crachlow

Старожил
@LexBell. А нельзя как то динамически создать файл рядом с установщиком, с последующим перемещением\копированием в дир установки? Типа:
Код:
function InitializeSetup(): Boolean;
var List: TStringList; txt: string;
begin
txt:= ExpandConstant('{src}\1.txt');
List:= TStringList.Create;
List.Add('5');
List.SaveToFile(txt);
List.Free;
end;
 

LexBell

Борода
Супер модератор
@LexBell. А нельзя как то динамически создать файл рядом с установщиком, с последующим перемещением\копированием в дир установки? Типа:
Код:
function InitializeSetup(): Boolean;
var List: TStringList; txt: string;
begin
txt:= ExpandConstant('{src}\1.txt');
List:= TStringList.Create;
List.Add('5');
List.SaveToFile(txt);
List.Free;
end;
Да ради бога. я просто ответил на вопрос
 

Александр85

Новичок
Что-то я ничего не понял (( Полностью можно скрипт, включая секцию Files?
У меня в папке устанавливаемой программы должен быть по окончании установки файл с определенным названием - это 1.txt, где это прописывать-то? Но при каждой новой установке, нужно чтобы копировался новый 1.txt.
Т.е. до компиляции насколько я понимаю, нужно создать папку TXT (пускай будет так называться) в неё я положу разные TXT от 0-20.... txt, условно и нужно чтобы при копировании в папку установки одного из этих 0-20... txt они переименовывались в 1.txt. Но главное, чтобы КАЖДЫЙ РАЗ ПРИ НОВОЙ установке копировался ДРУГОЙ из этих 0-20...txt и ПЕРЕИМЕНОВЫВАЛСЯ в 1.txt и перезаписывал имеющийся, если вдруг там, в папке установки уже есть 1.txt
 
Последнее редактирование:

Crachlow

Старожил
[Setup]
AppName=MyApp
AppVername=MyApp
DefaultDirName={pf}\MyApp
DisableWelcomePage=False
OutputDir=.\Output


[_Code]
procedure InitializeWizard();
var List: TStringList; txt: string;
begin
txt:= ExpandConstant('{src}\1.txt');
List:= TStringList.Create;
List.Add(IntToStr(Random(100)));
List.SaveToFile(txt);
List.Free;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
FileCopy(ExpandConstant('{src}\1.txt'), ExpandConstant('{app}\1.txt'), False);
DeleteFile(ExpandConstant('{src}\1.txt'))
end;
end;
 
Сверху