使用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}\Apache\conf\httpd.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}\Apache\conf\httpd.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}\Apache\htdocs"');
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}\Apache\htdocs">');
28       StringChangeEx(svArray[i], '\', '/', True);
29     end;
30   end;
31   SaveStringsToFile(fileName, svArray, false);    //最后从内存写回原文件,false表示不追加直接覆盖之前所有内容
32 end;

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

posted @ 2016-12-30 11:38  hbcdr  阅读(2739)  评论(1编辑  收藏  举报