• 使用Inno Setup函数修改文件内容


    0、inno打开文件操作&字符串操作所需函数原型及解释

      function LoadStringsFromFile(const FileName: String; var S: TArrayOfString): Boolean;载入指定的文本文件到指定的字串排列。如果成功返回 True,否则返回 False。FileName为打开文件的路径,S是字符串数组,数组的每一项对应一行文本数据。

      function SaveStringsToFile(const FileName: String; const S: TArrayOfString; const Append: Boolean): Boolean;保存指定的ASCII编码字符排列到指定的文件。如果 Append 是 True,并且指定的文件已经存在,它将附加到文件中,而不是覆盖。如果完成则返回 True,反之返回 False。

      function Pos(SubStr, S: String): Integer;在 S 内部,从左向右搜索 Substr,并返回一个在 S 中 Substr 的第一个字符索引整数值。如果 Substr 未找到,Pos 返回零。

      function StringChangeEx(var S: String; const FromStr, ToStr: String; const SupportDBCS: Boolean): Integer;改变所有在 S 中出现的 FromStr 到 ToStr。

    1、 判断一个文件是否存在,若存在读出所有内容,并写入另一个文件

     1 procedure test1();
     2 var
     3   fileName,tempStr:String;
     4   svArray: TArrayOfString;
     5   bExist:Boolean;
     6   nLines,i:Integer;
     7 begin
     8   fileName := ExpandConstant('{app}Apacheconfhttpd.conf');  //得到httpd.conf的路径
     9   bExist := FileExists(fileName);   //判断文件是否存在 
    10   if (bExist = True) then
    11   begin
    12     LoadStringsFromFile(fileName, svArray);   //从该文件中读出所有的文本保存到字符串数组 svArray中 
    13     nLines := GetArrayLength(svArray); 
    14     for i := 0 to nLines - 1 do
    15     begin
    16       tempStr := svArray[i];  //取出每一行
    17     end;
    18     SaveStringsToFile(fileName + '.副本', svArray, false);  //写到副本文件中
    19   end;
    20 end;

    2、修改文件某行,以修改Apache的配置文件httpd.conf为例

     1 procedure test2();
     2 var
     3   fileName,tempStr:String;
     4   svArray: TArrayOfString;
     5   nLines,i:Integer; 
     6 begin 
     7   fileName := ExpandConstant('{app}Apacheconfhttpd.conf');
     8   LoadStringsFromFile(fileName, svArray);
     9   nLines := GetArrayLength(svArray); 
    10   for i := 0 to nLines - 1 do
    11   begin
    12     tempStr := svArray[i];
    13     if (1 = Pos('ServerRoot', tempStr)) then    //Pos函数,判断当前行是否含有'ServerRoot'子串,返回1表示在1的位置找到子串,若不能找到该子串返回0
    14     begin
    15       svArray[i] := ExpandConstant('ServerRoot "{app}Apache"');  //修改开头是'ServerRoot'那行文本,此时只是修改内存数据的内容,并未写入文件
    16       StringChangeEx(svArray[i], '', '/', True);      //StringChangeEx函数,将字符串中所有的符号替换为符号/
    17     end;
    18     if (1 = Pos('Listen', tempStr)) then         //找到端口配置行
    19       svArray[i] := 'Listen 80';            //修改Apache端口号
    20     if (1 = Pos('DocumentRoot', tempStr)) then
    21     begin 
    22       svArray[i] := ExpandConstant('DocumentRoot "{app}Apachehtdocs"');
    23       StringChangeEx(svArray[i], '', '/', True);
    24     end;
    25     if ((1 = Pos('<Directory', tempStr)) and (Pos('htdocs', tempStr) > 1)) then
    26     begin
    27       svArray[i] := ExpandConstant('<Directory "{app}Apachehtdocs">');
    28       StringChangeEx(svArray[i], '', '/', True);
    29     end;
    30   end;
    31   SaveStringsToFile(fileName, svArray, false);    //最后从内存写回原文件,false表示不追加直接覆盖之前所有内容
    32 end;

     相关链接:文中使用的httpd.conf 下载

  • 相关阅读:
    【Django总结】Django警告Not Found: /favicon.ico
    【性能学习】Windows自带性能监控工具perform
    【Linux学习】定时任务和后台运行相关命令
    【Python学习】Python 写Windows Service服务程序
    【Django总结】ORM
    【Python学习】Python requests.post方法中data与json参数区别
    【Pycharm学习】Pycharm散记
    【Pycharm学习】离线安装插件
    【Mysql学习】索引操作
    [HG]奋斗赛G
  • 原文地址:https://www.cnblogs.com/hbcppcdr/p/6236252.html
Copyright © 2020-2023  润新知