【问题标题】:Using Inno Setup scripting to insert lines into a text file?使用 Inno Setup 脚本将行插入文本文件?
【发布时间】:2022-10-19 13:43:21
【问题描述】:

目标是在文本文档的开头插入多行(一次)。

但是我发现的方法一直存在问题。我试图调整它们,但它包含副作用问题。

两个问题:

  1. 追加文件结尾而不是插入行位置。
  2. 在目前的设计中,它附加文件 3 次。

    参考其他脚本,我发现包含Result := 的两行都导致了未知标识符。

    参考:

    [Code]
    procedure CurStepChanged(CurStep: TSetupStep);
    var
      ErrorCode: Integer;
      FileName: string;
      lines : TArrayOfString;
    begin
      fileName := ExpandConstant('{userappdata}\xy');
      fileName := AddBackslash(FileName) + 'zlt.net';
      SetArrayLength(lines, 6); 
      lines[0] := 'A';
      lines[1] := 'B';
      lines[2] := 'C';
      lines[3] := 'D';
      lines[4] := 'E';
      lines[5] := 'F';
      SaveStringsToFile(filename,lines,true);
    end;
    

【问题讨论】:

    标签: text-files inno-setup pascalscript


    【解决方案1】:
    1. 无法将行插入文件。您必须重新创建整个文件。

    2. 安装的每一步都会触发CurStepChanged。您将只想在其中一个步骤中插入行(可能是ssInstallssPostInstall

      procedure CurStepChanged(CurStep: TSetupStep);
      var
        Lines: TStringList;
      begin
        if CurStep = ssPostInstall then
        begin
          Lines := TStringList.Create;
          try
            Lines.LoadFromFile(FileName);
      
            Lines.Insert(0, 'A');
            Lines.Insert(1, 'B');
            Lines.Insert(2, 'C');
            Lines.Insert(3, 'D');
            Lines.Insert(4, 'E');
            Lines.Insert(5, 'F');
      
            Lines.SaveToFile(FileName);
          finally
            Lines.Free;
          end;
        end;
      end;
      

      该代码将整个文件加载到内存中。如果文件太大,这可能是个问题。但这对于小于数十 MB 的文件应该不是问题。同样反复调用Insert 效率不高。但是对于小文件和几行,这也不应该是一个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-12
      • 2022-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      相关资源
      最近更新 更多