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、 判断一个文件是否存在,若存在读出所有内容,并写入另一个文件

 procedure test1();
 var
   fileName,tempStr:String;
   svArray: TArrayOfString;
   bExist:Boolean;
   nLines,i:Integer;
 begin
   fileName := ExpandConstant('{app}\Apache\conf\httpd.conf');  //得到httpd.conf的路径
   bExist := FileExists(fileName);   //判断文件是否存在
   if (bExist = True) then
   begin
     LoadStringsFromFile(fileName, svArray);   //从该文件中读出所有的文本保存到字符串数组 svArray中
     nLines := GetArrayLength(svArray);
       do
     begin
       tempStr := svArray[i];  //取出每一行
     end;
     SaveStringsToFile(fileName + '.副本', svArray, false);  //写到副本文件中
   end;
 end;

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

 procedure test2();
 var
   fileName,tempStr:String;
   svArray: TArrayOfString;
   nLines,i:Integer;
 begin
   fileName := ExpandConstant('{app}\Apache\conf\httpd.conf');
   LoadStringsFromFile(fileName, svArray);
   nLines := GetArrayLength(svArray);
     do
   begin
     tempStr := svArray[i];
      = Pos('ServerRoot', tempStr)) then    //Pos函数,判断当前行是否含有'ServerRoot'子串,返回1表示在1的位置找到子串,若不能找到该子串返回0
     begin
       svArray[i] := ExpandConstant('ServerRoot "{app}\Apache\"');  //修改开头是'ServerRoot'那行文本,此时只是修改内存数据的内容,并未写入文件
       StringChangeEx(svArray[i], '\', '/', True);      //StringChangeEx函数,将字符串中所有的符号\替换为符号/
     end;
      = Pos('Listen', tempStr)) then         //找到端口配置行
       svArray[i] := 'Listen 80';            //修改Apache端口号
      = Pos('DocumentRoot', tempStr)) then
     begin
       svArray[i] := ExpandConstant('DocumentRoot "{app}\Apache\htdocs"');
       StringChangeEx(svArray[i], '\', '/', True);
     end;
      = Pos()) then
     begin
       svArray[i] := ExpandConstant('<Directory "{app}\Apache\htdocs">');
       StringChangeEx(svArray[i], '\', '/', True);
     end;
   end;
   SaveStringsToFile(fileName, svArray, false);    //最后从内存写回原文件,false表示不追加直接覆盖之前所有内容
 end;

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

使用Inno Setup函数修改文件内容的更多相关文章

  1. Inno Setup 如何读写文件

    软件安装的实质就是拷贝,对于简单的打包当然不需要考虑修改某(配置)文件.通过inno修改文件的目的在于把安装时相关信息写入文件中,提供其它应用的读取,而这些信息也只能在安装时才能确定,比如安装用户选择 ...

  2. Web 在线文件管理器学习笔记与总结(5)修改文件内容

    ① 读出要修改的文件的内容 ② 进行修改 ③ 将修改后的内容写进文件 index.php: <?php require 'dir.func.php'; require 'file.func.ph ...

  3. 直接用bat命令对Inno Setup的脚本文件.iss进行编译

    直接用bat命令对Inno Setup的脚本文件.iss进行编译 2010-06-17 15:17 qjn0059 | 浏览 2163 次 编程语言外语学习 分享到:   2010-06-29 11: ...

  4. java修改文件内容

    文件的读和写,大家都不陌生,但是修改呢?按照普通的读写流去修改的话,只能全部读取出来,在内存中修改好后,全部写进去,这样对于文件内容过多的时,性能很低. 最近在遇到这个问题的时候,发现RandomAc ...

  5. php 创建和修改文件内容

    file_put_contents写入文件 我们先来学习第一种写入文件的方式: int file_put_contents ( string $文件路径, string $写入数据]) 功能:向指定的 ...

  6. Inno setup 安装*.inf文件_示例

    nno setup 调用*.Inf文件的条目区段名称_示例 首先自己编写一个INF文件来供 Inno setup 进行测试: ;复制以下代码到记事本然后另存为123.inf .然后把123.inf文件 ...

  7. python批量修改文件内容及文件编码方式的处理

    最近公司在做tfs迁移,后面要用新的ip地址去访问tfs 拉取代码  ,所以原来发布脚本中.bat类型的脚本中的的ip地址需要更换 简单说下我们发布脚本层级目录 :每个服务站点下都会有一个发布脚本 . ...

  8. Qt修改文件内容

    在用Qt进行嵌入式开发的时候,有时需要通过界面永久的改变ip地址等网卡信息.此时只能修改系统中包含网卡信息的文件,下图红框中所示就是文件中的网卡信息. 那么如何修改这四行呢,我的做法是先打开该文本文件 ...

  9. Inno Setup 安装inf文件的一个例子

    原文 http://zwkufo.blog.163.com/blog/static/2588251201063033524889/ ; INF安装例子; [Setup]; 注意: AppId 的值是唯 ...

随机推荐

  1. [BZOJ1562][NOI2009] 变换序列

    Description Input Output Sample Input 5 1 1 2 2 1 Sample Output 1 2 4 0 3 HINT 30%的数据中N≤50:60%的数据中N≤ ...

  2. reason: &#39;[&lt;__NSDictionary0 0x7fda88f00c90&gt; setValue:forUndefinedKey:]: this class is not key value c

    reason: '[<__NSDictionary0 0x7fda88f00c90> setValue:forUndefinedKey:]: this class is not key v ...

  3. Windows Store App JavaScript 开发:简单对象绑定

    简单对象绑定是一种基本的绑定类型,可以实现将一个对象中的数据绑定到HTML元素的属性.下面通过一个示例来演示如何使用HTML5和JavaScript开发一个实现简单对象绑定的Windows应用商店应用 ...

  4. PAT 02-线性结构1 两个有序链表序列的合并 (15分)

    本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个递增的整数序列. 函数接口定义: List Merge( List L1, List L2 ); 其中List结构定义如下: typedef ...

  5. 执行JDBC的executeUpdate()方法时,报错:数据类型不一致,应为number,但却为binary

    该原因是因为,在拼写update语句的时候将一个number类型的字段的值赋为了null导致的,如果想将一个number类型的字清空,不能使用null,可以使用“”来替代.

  6. mongoDB(3) mapReduce

    mapReduce是大数据的核心内容,但实际操作中别用这个,所谓的mapReduce分两步 1.map:将数据分别取出,Map函数调用emit(key,value)遍历集合中所有的记录,将key与va ...

  7. AStar算法(转载)

    以下的文章来至http://blog.csdn.net/debugconsole/article/details/8165530,感激这位博主的翻译,可惜图片被和谐了,所以为方便阅读,我重新把图片贴上 ...

  8. leetcode 113 Path Sum II ----- java

    Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...

  9. Oracle笔记 十二、PL/SQL 面向对象oop编程

    ------------------------抽象数据类型----------- --创建地址类型,一定要加as object,还可以在类型中加过程或方法 create or replace typ ...

  10. .net 面试问题 汇总

    用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层? 答: 从下至上分别为:数据访问层.业务逻辑层(又或成为领域层).表示层 数据访问层:有时候也称为是持久层,其 ...