使用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 下载