vint56,
Цитата vint56:
у тебя случаем нет примера Переименование файлов не по маске а по определенному названию vo_ russian.spk на vo_english.spk в зависимости от выбранного компонента »
|
Не было пока ты не спросил

вот тебе процедура
читать дальше »
Код:

[Components]
Name: en; Description: Russian to English; Flags: exclusive
Name: ru; Description: English to Russian; Flags: exclusive
;[Files]
;Source: Folder\*; DestDir: {app}; Flags: recursesubdirs createallsubdirs onlyifdoesntexist
[code ]
#define A = (Defined UNICODE) ? "W" : "A"
function MoveFile(lpExistingFileName, lpNewFileName: String): BOOL; external 'MoveFile{#A}@kernel32.dll stdcall';
procedure RenameFileChunks(const RootFolder, SourceFileChunk, DestFileChunk: String; const Recurse: Boolean);
var
NewSearchPath, TempFileName: String;
FindRec: TFindRec;
begin
NewSearchPath := AddBackslash(RemoveBackslash(RootFolder));
if FindFirst(NewSearchPath + '*.*', FindRec) then
try
repeat
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
if Pos(SourceFileChunk, FindRec.Name) <> 0 then
begin
TempFileName := FindRec.Name;
StringChange(TempFileName, SourceFileChunk, DestFileChunk);
MoveFile(NewSearchPath + FindRec.Name, NewSearchPath + TempFileName);
end;
end else
if (FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY) and (FindRec.Name <> '.') and (FindRec.Name <> '..') then
if Recurse then RenameFileChunks(NewSearchPath + FindRec.Name, SourceFileChunk, DestFileChunk, Recurse);
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
AppPath: String;
begin
if CurStep = ssPostInstall then
begin
AppPath := ExpandConstant('{app}');
MsgBox('Сейчас переименую', mbInformation, MB_OK);
if IsComponentSelected('ru') then
RenameFileChunks(AppPath, 'english', 'russian', True)
if IsComponentSelected('en') then
RenameFileChunks(AppPath, 'russian', 'english', True);
end;
end;
прототип:
procedure RenameFileChunks(const RootFolder, SourceFileChunk, DestFileChunk: String; const Recurse: Boolean);
где:
RootFolder - исходная папка с файлами и папками, где нужно переименовывать
SourceFileChunk - часть в имени файла которую нужно переименовать, в данном случае 'russian' в vo_ russian.spk
DestFileChunk - часть в имени файла в которую нужно переименовать - 'english'
Recurse - булев значение. Если True то будет искать в подкаталогах RootFolder-а, в противном случае только в RootFolder
вызываешь процедуру например на этапе ssPostInstall для соответсвующих компонентов, если они выбраны ( IsComponentSelected(...) ... )
==============================================================
tr011_tmn,
верно, слетит только папка Redist с её содержимым