Вопрос Удаление файлов по маске

Awalder

Пользователь
Доброго дня!
Подскажите, возможно ли перед установкой мода на игру - очистить папку от ненужных файлов, используя функцию
DeleteFile(ExpandConstant('{userdocs}\My Games\Age of Empires III\Savegame\sp_Amsterdam_homecity.xml'));
, при этом сохраняя оригинальные файлы, список оригинальных файлов известен. Как бы по маске, или как правильнее выразиться))

Например - удалить все файлы из папки My Games\Age of Empires III\Savegame\groupings\ *** \\кроме файла Stringtable.xml
 
Последнее редактирование:

sergey3695

Ветеран
Модератор
Awalder, примерно так
Код:
procedure Delete;
var
  str,str2: string;
  FSR: TFindRec;
  FindResult: Boolean;
begin
  FindResult:= FindFirst(ExpandConstant('{userdocs}\My Games\Age of Empires III\Savegame\groupings\*.*'), FSR);
while FindResult do begin
  str:= FSR.Name;
  str2:= 'Stringtable.xml';
  SetLength(str, Length(str2));
if CompareText(str,str2)<>0 then
  DeleteFile(ExpandConstant('{userdocs}\My Games\Age of Empires III\Savegame\groupings\'+ str));
  FindResult:= FindNext(FSR);
end;
  FindClose(FSR);
end;
 

Awalder

Пользователь
Awalder, примерно так

[/code]
Спасибо за ответ!
Что означают строки в "шапке"? :
var
str,str2: string;
допустим у меня 3 или несколько файлов в папке, которые надо не удалять. , соответственно у меня появятся str,str2, str3,str4, .....,? или как должно выглядеть?
Где можно более подробную инфу почитать об этом? С уважением
 

sergey3695

Ветеран
Модератор
Awalder, да не...TStringList есть для таких целей. надо было сразу с ним написать (
Код:
procedure Delete;
var
  str: string;
  str2 : TStringList;
  FSR: TFindRec;
  FindResult: Boolean;
  i: integer;
  Del: boolean;
begin
  str2 := TStringList.Create;
  str2.Add('первый файл не надо');
  str2.Add('второй');
  str2.Add('третий');
//
  FindResult:= FindFirst(ExpandConstant('{userdocs}\My Games\Age of Empires III\Savegame\groupings\*.*'), FSR);
while FindResult do begin
  str:= FSR.Name;
  Del:= True;
for i := 0 to str2.Count-1 do
begin
if CompareText(str,str2[i])=0 then
  Del:= False;
end;
if Del then
  DeleteFile(ExpandConstant('{userdocs}\My Games\Age of Empires III\Savegame\groupings\'+ str));
  FindResult:= FindNext(FSR);
end;
  FindClose(FSR);
end;
 
Последнее редактирование:

Awalder

Пользователь
Awalder, да не...TStringList есть для таких целей. надо было сразу с ним написать (
Код:
procedure Delete;
var
  str: string;
  str2 : TStringList;
  FSR: TFindRec;
  FindResult: Boolean;
  i: integer;
  Del: boolean;
begin
  str2 := TStringList.Create;
  str2.Add('первый файл не надо');
  str2.Add('второй');
  str2.Add('третий');
//
  FindResult:= FindFirst(ExpandConstant('{userdocs}\My Games\Age of Empires III\Savegame\groupings\*.*'), FSR);
while FindResult do begin
  str:= FSR.Name;
  Del:= True;
for i := 0 to str2.Count-1 do
begin
if CompareText(str,str2[i])=0 then
  Del:= False;
end;
if Del then
  DeleteFile(ExpandConstant('{userdocs}\My Games\Age of Empires III\Savegame\groupings\'+ str));
  FindResult:= FindNext(FSR);
end;
  FindClose(FSR);
end;
Отлично! с одной папкой допустим, разобрались) Если таких папок две-три, и в каждой надо оставить оригиналы, а "мусор отсеять" - то это возможно?
 

sergey3695

Ветеран
Модератор
Awalder, ну можно написать процедурку, которая тащит данные скажем с .ini - что сканировать (чистить) и не удалять. Но суть то таже. Работа с ини файлами в справке.
 

Le9ent

Пользователь
На основе вашего примера добавил процедуру вида:
Код:
procedure DeleteFileMask(Path, Params: String);
var
  Str: String;
  FSR: TFindRec;
  FindResult: Boolean;
begin
  FindResult:= FindFirst(Path + Params, FSR);
  while FindResult do begin
    Str:= FSR.Name;
    DeleteFile(Path + Str);
    FindResult:= FindNext(FSR);
  end;
  FindClose(FSR);
end;
Код:
DeleteFileMask(ExpandConstant('{app}\'), '*.log');
DeleteFileMask(ExpandConstant('{app}\'), '*.cache');
Может быть кому то понадобится.
Как альтернатива стандартой DeleteFile()
 
Последнее редактирование:

Andreo Fadio

Пользователь
Подскажите, возможно ли перед установкой мода на игру - очистить папку от ненужных файлов, используя функцию
DeleteFile
Можно например использовать стандартную секцию Inno перед установкой:
Код:
[InstallDelete]
Type: files; Name: {app}\*.log
Type: files; Name: {app}\пример папки 1\*.*log
Type: files; Name: {userdocs}\папка сохранений\*.*log*
 
Сверху