使用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、 判断一个文件是否存在,若存在读出所有内容,并写入另一个文件
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函数修改文件内容的更多相关文章
- python笔记(三)---文件读写、修改文件内容、处理json、函数
文件读写(一) #r 只读,打开文件不存在的话,会报错 #w 只写,会清空原来文件的内容 #a 追加写,不会请求,打开的文件不存在的话,也会帮你新建的一个文件 print(f.read()) #获取到 ...
- Inno Setup 如何读写文件
软件安装的实质就是拷贝,对于简单的打包当然不需要考虑修改某(配置)文件.通过inno修改文件的目的在于把安装时相关信息写入文件中,提供其它应用的读取,而这些信息也只能在安装时才能确定,比如安装用户选择 ...
- linux下C++修改文件内容
C fwrite在任意位置写入文件,并可修改文件内容 想实现类似迅雷那样下载时可以从文件半中间写入的功能 #include<stdio.h> int main() { FILE *fp; ...
- Web 在线文件管理器学习笔记与总结(5)修改文件内容
① 读出要修改的文件的内容 ② 进行修改 ③ 将修改后的内容写进文件 index.php: <?php require 'dir.func.php'; require 'file.func.ph ...
- 直接用bat命令对Inno Setup的脚本文件.iss进行编译
直接用bat命令对Inno Setup的脚本文件.iss进行编译 2010-06-17 15:17 qjn0059 | 浏览 2163 次 编程语言外语学习 分享到: 2010-06-29 11: ...
- java修改文件内容
文件的读和写,大家都不陌生,但是修改呢?按照普通的读写流去修改的话,只能全部读取出来,在内存中修改好后,全部写进去,这样对于文件内容过多的时,性能很低. 最近在遇到这个问题的时候,发现RandomAc ...
- Java之修改文件内容:字符串逐行替换
依赖包: <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</a ...
- python 修改文件内容
python 修改文件内容 一.修改原文件方式 1 def alter(file,old_str,new_str): 2 """ 3 替换文件中的字符串 4 :param ...
- python 文件操作(二) 替换性修改文件内容
正常情况我们想要仅对文件某一行的内容进行修改,而不改变其他内容,在原文件的基础上不能修改,因为当我们对原文件进行写操作时,如果原文件里面有内容,就会清空,在这种情况下,只能对文件进行替换性修改:即重新 ...
随机推荐
- 在css嵌套中的html的table里的字左右不对齐
[现象]AAAA与天数的数字左右不居中 <table border=1 align="center"> <tr> <td width="20 ...
- oracle java SE
http://www.oracle.com/technetwork/java/javase/downloads/index.html
- My97 设置近3天日期
1.引用my97 js 和css 2.前台代码 <div class="FormItem"> <label> 申请时间</label> < ...
- DQL、DML、DDL、DCL的概念与区别
SQL(Structure Query Language)语言是数据库的核心语言. SQL的发展是从1974年开始的,其发展过程如下:1974年-----由Boyce和Chamberlin提出,当时称 ...
- 【WMware】关于VMware服务器虚拟化管理之服务器容量扩充
将服务器物理资源抽象成逻辑资源,让一台服务器变成几台甚至上百台相互隔离的虚拟服务器,我们不再受限于物理上的界限,而是让CPU.内存.磁盘.I/O等硬件变成可以动态管理的“资源池”,从而提高资源的利用率 ...
- 网站微信登录授权 ASP.NET
最新做一些项目都有微信登录注册什么的,今天就把自己整理的demo提供给大家 微信认证流程(我自己简称三次握手): 1.用户同意授权,获取code 2.通过code换取网页授权access_token, ...
- 随部分div增高总的div也随着增高
实现效果: 随着尺码框选项变多,高度也就增加,上边总体的大框高度也增加,简单的样式代码如下 代码: <div style=“height: auto; overflow: hidden;”> ...
- 下拉tableView实现类似微信中带图的灰色背景
UIView *topView = [[UIView alloc]initWithFrame:CGRectMake(, -, ScreenWidth, )]; UIImageView *iconIma ...
- NopCommerce 框架系列(二)
这一篇,让我们一起来认识一下 NopCommerce 的整体目录结构
- 性能:CPU、Memory、耗电量
1.自动 APP 性能测试需求讨论:https://testerhome.com/topics/3172 2.Android Studio中怎么使用DDMS工具?:http://www.cnblogs ...