Inno Setup, как искать конкретную строку в нескольких файлах? - PullRequest
0 голосов
/ 05 марта 2019

Я хотел бы найти определенную строку в нескольких файлах.
Например, oem1.inf oem2.inf oem5.inf oem8.inf ...
Все имена файлов назначения имеют одинаковый формат - oem*.inf
Я хочу найти определенную подстроку (например, "1234" в "ABA1234") в этих файлах.
Я ссылался Inno setup на поиск существующего файла , но он немного отличается от моего вопроса.


Теперь я могу получить весь путь:

Var
  FilesFound: Integer;
  FindRec: TFindRec;
  Stemp: String;
begin
  FilesFound := 0;
  if FindFirst('C:\Path\oem*.inf', FindRec) then begin
    try
      repeat
        if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
        begin
          temp := 'C:\Path\' + FindRec.Name;
          MsgBox(temp, mbInformation, MB_OK);
          FilesFound := FilesFound + 1;
        end;
      until not FindNext(FindRec);
    finally
      FindClose(FindRec);
    end;
  end;
  MsgBox(IntToStr(FilesFound) + ' files found in the System directory.',
    mbInformation, MB_OK);
end;

1 Ответ

0 голосов
/ 06 марта 2019

Я решил этот вопрос.Спасибо Мартину и Кену.

Var
  FindRec: TFindRec;
  I: Integer;
  Tag: String;
  Line: String;
  FileLines: TStringList;
begin
  if FindFirst('C:\PATH\oem*.inf', FindRec) then
    begin
      try
        FileLines := TStringList.Create;
        Tag := 'ABA1234';
        repeat
          if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
            begin
              FileLines.LoadFromFile('C:\PATH\' + FindRec.Name);
              for I := 0 to FileLines.Count - 1 do
                begin
                  Line := FileLines[I];
                  if (Pos(Tag, Line) > 0) then
                    MsgBox(temp, mbInformation, MB_OK);
                end;
            end;
        until not FindNext(FindRec);
      finally
        FileLines.Free;
        FindClose(FindRec);
      end;
    end;
end;
...