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);
for i := to nLines - 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);
for i := to nLines - do
begin
tempStr := svArray[i];
if ( = Pos('ServerRoot', tempStr)) then    //Pos函数,判断当前行是否含有'ServerRoot'子串,返回1表示在1的位置找到子串,若不能找到该子串返回0
begin
svArray[i] := ExpandConstant('ServerRoot "{app}\Apache\"');  //修改开头是'ServerRoot'那行文本,此时只是修改内存数据的内容,并未写入文件
StringChangeEx(svArray[i], '\', '/', True);      //StringChangeEx函数,将字符串中所有的符号\替换为符号/
end;
if ( = Pos('Listen', tempStr)) then         //找到端口配置行
svArray[i] := 'Listen 80';            //修改Apache端口号
if ( = Pos('DocumentRoot', tempStr)) then
begin
svArray[i] := ExpandConstant('DocumentRoot "{app}\Apache\htdocs"');
StringChangeEx(svArray[i], '\', '/', True);
end;
if (( = Pos('<Directory', tempStr)) and (Pos('htdocs', tempStr) > )) 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. python笔记(三)---文件读写、修改文件内容、处理json、函数

    文件读写(一) #r 只读,打开文件不存在的话,会报错 #w 只写,会清空原来文件的内容 #a 追加写,不会请求,打开的文件不存在的话,也会帮你新建的一个文件 print(f.read()) #获取到 ...

  2. Inno Setup 如何读写文件

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

  3. linux下C++修改文件内容

    C fwrite在任意位置写入文件,并可修改文件内容 想实现类似迅雷那样下载时可以从文件半中间写入的功能 #include<stdio.h> int main() { FILE *fp; ...

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

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

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

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

  6. java修改文件内容

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

  7. Java之修改文件内容:字符串逐行替换

    依赖包: <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</a ...

  8. python 修改文件内容

    python 修改文件内容 一.修改原文件方式 1 def alter(file,old_str,new_str): 2 """ 3 替换文件中的字符串 4 :param ...

  9. python 文件操作(二) 替换性修改文件内容

    正常情况我们想要仅对文件某一行的内容进行修改,而不改变其他内容,在原文件的基础上不能修改,因为当我们对原文件进行写操作时,如果原文件里面有内容,就会清空,在这种情况下,只能对文件进行替换性修改:即重新 ...

随机推荐

  1. wamp如何添加多个站点

    1.打开wamp目录下的bin目录下的apache/conf/extra/httpd-vhosts.conf文件(虚拟目录配置文件),修改文件:在num01下创建index.php文件,输出01,:在 ...

  2. nginx下开启pathinfo模式

    第一种方式是通过重写url来实现pathinfo模式: location / { if (!-e $request_filename){ rewrite ^/(.*)$ /index.php?s=/$ ...

  3. c语言选择排序

    简单选择排序是经常用到的一种排序算法. 原理: 1.简单选择排序一句话概括:每次选择无序数列中最小的将其放在有序数列的最后. 2.在简单选择排序中,我们用初始化的数字int a[6]={2,5,6,3 ...

  4. 移动端关于meta的几个常用标签

    meta元素可提供有关某个 HTML 元素的元信息 (meta-information),比如描述.针对搜索引擎的关键词以及刷新频率. 用的最多的莫过于 [ charset ] 啦,用于指定整个htm ...

  5. 使用spring-data-redis做缓存

    说到缓存,首先肯定是spring-cache了. spring-cache使用一个CacheManager来进行管理缓存,为了使用我们的redis作为缓存源,需要向spring注册一个CacheMan ...

  6. 安装CocoaPods碰到的问题

    1.安装完Pods后第一次使用pod install命令提示"Setting up CocoaPods master repo" 解决办法: 第一次使用pod命令时,先执行以下po ...

  7. 集合类List,set,Map 的遍历方法,用法和区别

    遍历list: 方法一: for(String s:lists){ System.out.println(s); } 方法二: System.out.println("list with i ...

  8. 强大的Spring缓存技术(下)

    基本原理 一句话介绍就是Spring AOP的动态代理技术. 如果读者对Spring AOP不熟悉的话,可以去看看官方文档 扩展性 直到现在,我们已经学会了如何使用开箱即用的 spring cache ...

  9. ajax 如何提交数据到后台jsp页面,以及提交完跳转到jsp页面

    我logincheck.jsp页面取传参数代码: String user=request.getParameter("user1"); String pwd=request.get ...

  10. SQL Server 常用函数

    1.DATEADD 在向指定日期加上一段时间的基础上,返回新的 datetime 值. 语法 DATEADD ( datepart , number, date ) 参数 datepart 是规定应向 ...