Inno setup Inno设置-如何在设置过程中编辑文本文件中的特定行?

Inno setup Inno设置-如何在设置过程中编辑文本文件中的特定行?,inno-setup,Inno Setup,我需要使用Inno设置编辑文本文件中的特定行。我需要我的安装程序找到此行(“appinstalldir”C:MYXFOLDER\\apps\\common\\App70“)并使用安装程序中的目录路径 这是我尝试使用的代码: 过程CurStepChanged(CurStep:TSetupStep); 开始 如果CurStep=ssDone,则 开始 SaveStringToFile( ExpandConstant({app}\app70.txt'), '目录的路径'+'\\apps\\common

我需要使用Inno设置编辑文本文件中的特定行。我需要我的安装程序找到此行(
“appinstalldir”C:MYXFOLDER\\apps\\common\\App70“
)并使用安装程序中的目录路径

这是我尝试使用的代码:

过程CurStepChanged(CurStep:TSetupStep);
开始
如果CurStep=ssDone,则
开始
SaveStringToFile(
ExpandConstant({app}\app70.txt'),
'目录的路径'+'\\apps\\common\\App70',True);
结束;
结束;
这是我的文本文件:

"App"
{
    "appID"     "70"

    {
        "appinstalldir"     "C:MYXFOLDER\\apps\\common\\App70"
    }
}

这段代码可以做到。但请注意,如果标记的值由引号字符括起,则此代码不会检查,一旦它找到由
标记名
参数指定的标记,它将截断行的其余部分,并附加由
标记值
参数给出的值:

函数ReplaceValue(常量文件名、标记名、标记值:字符串):布尔值;
变量
I:整数;
标签:字符串;
行:字符串;
TagPos:整数;
文件行:TStringList;
开始
结果:=假;
FileLines:=TStringList.Create;
尝试
标记:='“'+标记名+'”;
FileLines.LoadFromFile(文件名);
对于I:=0到文件行。计数-1 do
开始
行:=文件行[I];
TagPos:=Pos(标签、行);
如果TagPos>0,则
开始
结果:=真;
删除(行,标记位置+长度(标记),最大值);
行:=行+'“'+标记值+'”;
文件行[I]:=行;
FileLines.SaveToFile(文件名);
打破
结束;
结束;
最后
文件行。免费;
结束;
结束;
过程CurStepChanged(CurStep:TSetupStep);
变量
新路径:字符串;
开始
如果CurStep=ssDone,则
开始
NewPath:=ExpandConstant('{app}')+'\apps\common\App70';
StringChangeEx(新路径“\”,“\”,True);
如果ReplaceValue(ExpandConstant(“{app}\app70.txt”),“appinstalldir”,
新路径)
然后
MsgBox('标记值已被替换!',MB信息,MB_确定)
其他的
MsgBox('标记值未被替换!',mbError,MB_OK);
结束;
结束;

嗨,特拉马先生,我编辑了如下代码:
ReplaceValue(ExpandConstant({app}\app70.txt'),'appinstalldir',ExpandConstant({app}')+'\\apps\\common\\app70')
我在txt文件中得到了一个很好的结果:“app”{“appID”“70”{“appinstalldir”“C:\Program Files(x86)\FOLDER1\FOLDER2\\apps\\common\\app70”}}`但我遇到了这个问题。。。我的软件只读取
“appinstalldir”
目录的路径,如果其格式为:
“C:\\Program Files(x86)\\FOLDER1\\FOLDER2\\apps\\common\\App70”
我需要添加额外的“\”,我该怎么做?我明白了。需要将新值的
ExpandConstant(“{app}”)
部分的反斜杠加倍。由于没有直接的函数来执行此操作,因此可以使用
StringChangeEx
函数,该函数将某个字符串(或在本例中为char)的所有出现替换为其他字符串。在您的情况下,您可以使用单个反斜杠构建路径,然后在此字符串中使用双反斜杠替换反斜杠,如编辑的代码所示。您是最好的!!谢谢确保写入该文件的内容非常严格。如果将
{
}
放在同一行上,则parsign将中断。