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

  • Автор темы Автор темы Awalder
  • Дата начала Дата начала

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
 
Последнее редактирование:
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, примерно так

[/code]

Спасибо за ответ!
Что означают строки в "шапке"? :
var
str,str2: string;
допустим у меня 3 или несколько файлов в папке, которые надо не удалять. , соответственно у меня появятся str,str2, str3,str4, .....,? или как должно выглядеть?
Где можно более подробную инфу почитать об этом? С уважением
 
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, да не...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, ну можно написать процедурку, которая тащит данные скажем с .ini - что сканировать (чистить) и не удалять. Но суть то таже. Работа с ини файлами в справке.
 

На основе вашего примера добавил процедуру вида:
Код:
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()
 
Последнее редактирование:
Подскажите, возможно ли перед установкой мода на игру - очистить папку от ненужных файлов, используя функцию
DeleteFile
Можно например использовать стандартную секцию Inno перед установкой:
Код:
[InstallDelete]
Type: files; Name: {app}\*.log
Type: files; Name: {app}\пример папки 1\*.*log
Type: files; Name: {userdocs}\папка сохранений\*.*log*
 
Ребят, если тема еще живая, может кто то подсказать, какой код написать и куда вставить, чтобы при деинсталляции игры, появлялся запрос на удаления сохранений игры, как например у деинсталлятора GoG.
P/S: сохранения лежат в appdata\roaming
 
Ребят, если тема еще живая, может кто то подсказать, какой код написать и куда вставить, чтобы при деинсталляции игры, появлялся запрос на удаления сохранений игры, как например у деинсталлятора GoG.
P/S: сохранения лежат в appdata\roaming
Как-то так:
Форматирование (BB-код):
#define SaveDir "MySavedGames"

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[CustomMessages]
DeleteSave=Удалить сохраненные игры и профили?

[_Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  begin
    if DirExists(ExpandConstant('{userappdata}') + '\{#SaveDir}') then
      if MsgBox(CustomMessage('DeleteSave'), mbInformation, MB_YESNO) = idYes then
        DelTree(ExpandConstant('{userappdata}') + '\{#SaveDir}', True, True, True);
  end;
end;
 
Последнее редактирование:
Как-то так:
Форматирование (BB-код):
#define SaveDir "MySavedGames"

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[CustomMessages]
DeleteSave=Удалить сохраненные игры и профили?

[_Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  begin
    if DirExists(ExpandConstant('{userappdata}') + '\{#SaveDir}') then
      if MsgBox(ExpandConstant('{cm:DeleteSave}'), mbInformation, MB_YESNO) = idYes then
        DelTree(ExpandConstant('{userappdata}') + '\{#SaveDir}', True, True, True);
  end;
end;

спасибо, буду пробовать.
 
Как-то так:
Форматирование (BB-код):
#define SaveDir "MySavedGames"

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[CustomMessages]
DeleteSave=Удалить сохраненные игры и профили?

[_Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  begin
    if DirExists(ExpandConstant('{userappdata}') + '\{#SaveDir}') then
      if MsgBox(ExpandConstant('{cm:DeleteSave}'), mbInformation, MB_YESNO) = idYes then
        DelTree(ExpandConstant('{userappdata}') + '\{#SaveDir}', True, True, True);
  end;
end;
а не подскажешь как быть, код рабочий, вопрос такой, в названии папки с сохранеиями игры, создается автоматически, присутствует апостроф ('), и при компиляции inno ругается на него, как обойти эту проблему, и возможно ли?
 
Дописать еще один, либо использовать chr(39), либо #39

про дописать я сам уже догадался, вернее справку почитал, но после добавления второго апострофа, то есть, 'мама''папа', сохранка удаляется, но. по завершении удаления, появляется окно, что не удалось удалить часть файлов, удалите руками, либо использовать chr(39), либо #39, это я не знаю как использовать, куда прописать, я еще не настолько хорошо владею прописыванием кодов.

p/S: а нет, двойной апостроф нормально сработал, просто допустил другую ошибку в коде, поэтому выбивало такую, что не вс файлы удалены.
 
Последнее редактирование:
Назад
Сверху