1. Уважаемые гости и пользователи форума.
    Администрация настоятельно рекомендует не регистрировать несколько аккаунтов для одного пользователя. При выявлении наличия мультиаккаунтов будут заблокированы все учетные записи данного пользователя.
    Аккаунты, зарегистрированные на временную почту будут также заблокированы.

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

Тема в разделе "Inno Setup", создана пользователем Awalder, 28 апр 2016.

  1. Пользователь

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

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

    Регистрация:
    16 фев 2016
    Сообщения:
    77
    Симпатии:
    11
    Пол:
    Мужской
    Без вариантов "удаление файлов по маске" ?
     
  3. Ветеран Модератор

    Регистрация:
    26 июн 2011
    Сообщения:
    1.305
    Симпатии:
    836
    Awalder, примерно так
    Код (Inno):
    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 нравится это.
  4. Пользователь

    Регистрация:
    16 фев 2016
    Сообщения:
    77
    Симпатии:
    11
    Пол:
    Мужской
    Спасибо за ответ!
    Что означают строки в "шапке"? :
    var
    str,str2: string;
    допустим у меня 3 или несколько файлов в папке, которые надо не удалять. , соответственно у меня появятся str,str2, str3,str4, .....,? или как должно выглядеть?
    Где можно более подробную инфу почитать об этом? С уважением
     
  5. Ветеран Модератор

    Регистрация:
    26 июн 2011
    Сообщения:
    1.305
    Симпатии:
    836
    Awalder, да не...TStringList есть для таких целей. надо было сразу с ним написать (
    Код (Inno):

    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;
     
     
    Последнее редактирование: 4 май 2016
    vint56, SBalykov и Awalder нравится это.
  6. Пользователь

    Регистрация:
    16 фев 2016
    Сообщения:
    77
    Симпатии:
    11
    Пол:
    Мужской
    Отлично! с одной папкой допустим, разобрались) Если таких папок две-три, и в каждой надо оставить оригиналы, а "мусор отсеять" - то это возможно?
     
  7. Ветеран Модератор

    Регистрация:
    26 июн 2011
    Сообщения:
    1.305
    Симпатии:
    836
    Awalder, ну можно написать процедурку, которая тащит данные скажем с .ini - что сканировать (чистить) и не удалять. Но суть то таже. Работа с ини файлами в справке.
     
  8. Пользователь

    Регистрация:
    16 фев 2016
    Сообщения:
    77
    Симпатии:
    11
    Пол:
    Мужской
    Ок, спасибо
     
  9. Пользователь

    Регистрация:
    21 июл 2012
    Сообщения:
    34
    Симпатии:
    2
    Пол:
    Мужской
    На основе вашего примера добавил процедуру вида:
    Код (Inno):
    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;
    Код (Inno):
    DeleteFileMask(ExpandConstant('{app}\'), '*.log');
    DeleteFileMask(ExpandConstant('{app}\'), '*.cache');
    Может быть кому то понадобится.
    Как альтернатива стандартой DeleteFile()
     
    Последнее редактирование: 6 апр 2019
  10. Пользователь

    Регистрация:
    17 сен 2016
    Сообщения:
    19
    Симпатии:
    4
    Пол:
    Мужской
    Можно например использовать стандартную секцию Inno перед установкой:
    Код (Inno):
    [InstallDelete]
    Type: files; Name: {app}\*.log
    Type: files; Name: {app}\пример папки 1\*.*log
    Type: files; Name: {userdocs}\папка сохранений\*.*log*
     
     

Поделиться этой страницей