【问题标题】:Replace a text in a file with Inno Setup用 Inno Setup 替换文件中的文本
【发布时间】:2013-11-24 12:19:38
【问题描述】:

您好,我在用 Inno Setup(基于 Delphi)替换文本文件中的文本时遇到问题。

我的代码:

procedure  FileReplaceString(const  FileName,  searchstring,  replacestring:  string);
var
    fs:  TFileStream;
    S:  string;
begin
    fs  :=  TFileStream.Create(FileName,  fmOpenread  or  fmShareDenyNone);
    try
        SetLength(S,  fs.Size);
        fs.ReadBuffer(S[1],  fs.Size);
    finally
        fs.Free;
    end;
    { the compiler stops here with: unknown identifier 'StringReplace' }
    S := StringReplace(S,  SearchString,  replaceString,  [rfReplaceAll,  rfIgnoreCase]); 
    fs  :=  TFileStream.Create(FileName,  fmCreate);
    try
        fs.WriteBuffer(S[1],  Length(S));
    finally
        fs.Free;
    end;
end;

我发现我必须改用StringChange(),但我不知道如何在我的代码中使用它。我不太了解 Delphi 或 Inno Setup。 我希望你能帮助我。

【问题讨论】:

  • Inno Setup != Delphi。 Inno Setup 是在 Delphi 中编译的,但它使用自己的基于 Pascal 脚本的语言。
  • 感谢您的回答。那么我现在应该如何更改我的代码。
  • 输入文件是否包含 Unicode 文本?
  • StringChange(s, SearchString, replaceString, True)

标签: inno-setup pascalscript


【解决方案1】:

我希望这个函数能完成这项工作:

function FileReplaceString(const FileName, SearchString, ReplaceString: string):boolean;
var
  MyFile : TStrings;
  MyText : string;
begin
  MyFile := TStringList.Create;

  try
    result := true;

    try
      MyFile.LoadFromFile(FileName);
      MyText := MyFile.Text;

      { Only save if text has been changed. }
      if StringChangeEx(MyText, SearchString, ReplaceString, True) > 0 then
      begin;
        MyFile.Text := MyText;
        MyFile.SaveToFile(FileName);
      end;
    except
      result := false;
    end;
  finally
    MyFile.Free;
  end;
end;

感谢 TLama 的反馈。

【讨论】:

  • 您可以使用if StringChangeEx(...) > 0 then Assign text to string list and save。而OK 是不必要的。只需将False 分配给Result 作为第一行,并仅在没有任何异常的情况下分配True
  • @TLama,感谢您的建议。我修改了检查文件内容更改的代码。关于返回的结果;如果文件不存在(没有引发异常),它也会返回 false,所以我保持不变。 (我使用 OK 而不是 result 的目的是为了便于阅读。)
  • 恕我直言,检查文件是否存在应该在这个函数之外完成,在你调用它之前(想象一下,你会调用例如 10 个处理同一个文件的函数,每个你会问如果存在相同的文件)。我知道,这是品味问题,但是如果文件打开由于某种原因(主要是访问权限)失败,您将引发异常,所以即使文件无法打开,为什么不引发异常,因为它没有存在 ?关于OK,好吧,我与“正确”编写的代码紧密相关,以至于我发现这种结构令人困惑。但同样,这是一个品味问题 :-)
猜你喜欢
  • 2022-06-22
  • 1970-01-01
  • 2014-12-19
  • 1970-01-01
  • 2022-10-19
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多