procedure TForm1.Button1Click(Sender: TObject);
var
FIniFile: TIniFile;
begin
FIniFile := TIniFile.Create('C:\Program Files\Maxthon2\SharedAccount\Config\Plugins.ini');
try
if FiniFile.SectionExists('Settings') then begin
showmessage('SectionExists');
if FiniFile.ValueExists('Settings','LoadAllIEPlugin') then
showmessage('ValueExists');
end;
FiniFile.WriteString('Settings','LoadAllIEPlugin','1');
finally
FreeAndNil(FIniFile);
end;
'SectionExists'消息框不出来,也就是说根本没读取到Settings这个小结名
FiniFile.WriteString('Settings','LoadAllIEPlugin','1');
这句在ini文件末尾又加了一个[Settings] LoadAllIEPlugin=1,也就是说读取不到后又自动创建了这个小结,第二次点击按钮
'SectionExists'消息框就会弹出提示,说明可以读取到。
另外我如果建一个空白的ini文件,把这个已经存在的ini文件的内容拷贝过来后,也能够第一次就读取到[Settings]的值,这是怎么回事呀。感觉是自己新建的就可以读取到,对已经生成的就无法读取到。
15 个解决方案
#1
注意字符的类型 大小写
#2
都是直接拷贝过来的呀。读取section段的消息'SectionExists'根本不执行。说明根本没读取到
#3
我另外新建一个ini文件,把原来的ini文件内容直接拷贝到新建的ini文件里,可以读取出来。但是就是无法读取原来的ini文件,我复制原来的ini文件,读这个复制的文件也同样读取不到。就是原先建好的无法读取,非要新建一个才能读取
#4
哪位能帮忙在自己的机器上试一下看看呀。不是自己新建的,就是读取遨游目录下的已存在的那个配置文件看是否能读取出来
#5
可能和存放的字符编码有关吧
#6
{配置文件读写}
if FileExists(AppPath + 'xxx.ini') then
begin
MyIni := TIniFile.Create(AppPath + 'xxx.ini');
EditPort.Text := MyIni.ReadString('set', 'aaa', '');
EditKey.Text := MyIni.ReadString('set', 'bbb', '');
MyIni.Destroy;
end
else
begin
MyIni := TIniFile.Create(AppPath + 'xxx.ini');
MyIni.WriteString('set', 'aaa', 111);
MyIni.WriteString('set', 'bbb', 222);
MyIni.Destroy;
end;
if FileExists(AppPath + 'xxx.ini') then
begin
MyIni := TIniFile.Create(AppPath + 'xxx.ini');
EditPort.Text := MyIni.ReadString('set', 'aaa', '');
EditKey.Text := MyIni.ReadString('set', 'bbb', '');
MyIni.Destroy;
end
else
begin
MyIni := TIniFile.Create(AppPath + 'xxx.ini');
MyIni.WriteString('set', 'aaa', 111);
MyIni.WriteString('set', 'bbb', 222);
MyIni.Destroy;
end;
#7
看了楼主的杰作认为有点搞笑,
首先你查找的项未找到,说明此项在文件中不存在,但你后面加载了一个语句是
FiniFile.WriteString('Settings','LoadAllIEPlugin','1');
而后,点击第二次按钮事件就发现会出现对话框,
你以为第一次的INI文件有问题,就又创建了一个空的INI文件,并考备了第一次按钮事件后的INI文件内容,
呵呵
此时的 'Settings','LoadAllIEPlugin','1' 这一项是已经存在的,
试问LZ,
你是写代码急晕了吗?
首先你查找的项未找到,说明此项在文件中不存在,但你后面加载了一个语句是
FiniFile.WriteString('Settings','LoadAllIEPlugin','1');
而后,点击第二次按钮事件就发现会出现对话框,
你以为第一次的INI文件有问题,就又创建了一个空的INI文件,并考备了第一次按钮事件后的INI文件内容,
呵呵
此时的 'Settings','LoadAllIEPlugin','1' 这一项是已经存在的,
试问LZ,
你是写代码急晕了吗?
#8
楼主不要急,把思路理清楚
需要说明的是:
FiniFile.WriteString('Settings','LoadAllIEPlugin','1');
这个write动作,如果原来没有settings节,则会自动创建这个节
需要说明的是:
FiniFile.WriteString('Settings','LoadAllIEPlugin','1');
这个write动作,如果原来没有settings节,则会自动创建这个节
#9
回复liuhuan992,那个确实应该放在判断里面。这个没错。
但是我把那段writestring的屏蔽了,不写总可以吧。
但是不屏蔽FiniFile.WriteString('Settings','LoadAllIEPlugin','1'); 却又能添加一个新的'Settings'+LoadAllIEPlugin,则还是说明上面的判断没执行,因为如果存在这个的的'Settings'的话,应该是直接更新原来已经存在的LoadAllIEPlugin的键值,而不是又重新添加一个新的一样的Section呀,也就是说根本就是忽略了原来的同样的Section,重新创建一个新的Section
但是我把那段writestring的屏蔽了,不写总可以吧。
但是不屏蔽FiniFile.WriteString('Settings','LoadAllIEPlugin','1'); 却又能添加一个新的'Settings'+LoadAllIEPlugin,则还是说明上面的判断没执行,因为如果存在这个的的'Settings'的话,应该是直接更新原来已经存在的LoadAllIEPlugin的键值,而不是又重新添加一个新的一样的Section呀,也就是说根本就是忽略了原来的同样的Section,重新创建一个新的Section
#10
同样的代码我目录改成windows下的一个配置文件('C:\WINDOWS\win.ini'),
但是能修改成功,直接修改了一个,而不是又增加了一个新的Section
procedure TForm1.Button1Click(Sender: TObject);
var
FIniFile: TIniFile;
begin
FIniFile := TIniFile.Create('C:\WINDOWS\win.ini');
try
if FiniFile.SectionExists('SciCalc') then begin
showmessage('SectionExists');
if FiniFile.ValueExists('SciCalc','layout') then
showmessage('ValueExists');
end;
FiniFile.WriteString('SciCalc','layout','1');
finally
FreeAndNil(FIniFile);
end;
end;
现在的问题是,是不是文件有什么问题?还是说ini文件是不是在什么情况需要进行什么特别处理
各位有遨游的能否做个demo测试一下那个文件来修改一下里面的参数看能否成功,就知道我说的
问题了
但是能修改成功,直接修改了一个,而不是又增加了一个新的Section
procedure TForm1.Button1Click(Sender: TObject);
var
FIniFile: TIniFile;
begin
FIniFile := TIniFile.Create('C:\WINDOWS\win.ini');
try
if FiniFile.SectionExists('SciCalc') then begin
showmessage('SectionExists');
if FiniFile.ValueExists('SciCalc','layout') then
showmessage('ValueExists');
end;
FiniFile.WriteString('SciCalc','layout','1');
finally
FreeAndNil(FIniFile);
end;
end;
现在的问题是,是不是文件有什么问题?还是说ini文件是不是在什么情况需要进行什么特别处理
各位有遨游的能否做个demo测试一下那个文件来修改一下里面的参数看能否成功,就知道我说的
问题了
#11
找到读不出的原因了,但是该如何解决???
我写了下面的代码读取
FileContent := TStringList.Create;
if FileExists('C:\Program Files\Maxthon2.5.4\SharedAccount\Config\Plugins.ini') then
begin
FileContent.LoadFromFile('C:\Program Files\Maxthon2\SharedAccount\Config\Plugins.ini');
showmessage(FileContent.Text);
//自己写代码操作吧。
end;
消息框弹出的本来应该是[Paths]才是正确的,但是消息框弹出的确是 楉煆Paths],前面的
[ 变了“楉煆”乱码难怪读取不到,所以才创建了一个[Paths]。但是我直接打开ini文件看的又是两个[Paths]这种应该如何处理呀?不可能先删除ini文件再重新创建吧。是否需要转码一类的工作
我写了下面的代码读取
FileContent := TStringList.Create;
if FileExists('C:\Program Files\Maxthon2.5.4\SharedAccount\Config\Plugins.ini') then
begin
FileContent.LoadFromFile('C:\Program Files\Maxthon2\SharedAccount\Config\Plugins.ini');
showmessage(FileContent.Text);
//自己写代码操作吧。
end;
消息框弹出的本来应该是[Paths]才是正确的,但是消息框弹出的确是 楉煆Paths],前面的
[ 变了“楉煆”乱码难怪读取不到,所以才创建了一个[Paths]。但是我直接打开ini文件看的又是两个[Paths]这种应该如何处理呀?不可能先删除ini文件再重新创建吧。是否需要转码一类的工作
#12
1、是不是文件读写权限问题?
2、是不是文件编码(gb2312、utf-8/16)的问题?
2、是不是文件编码(gb2312、utf-8/16)的问题?
#13
就是一个ini文件呀。我发现这个ini文件通过直接读取文件的方式,文件都是第一行会这样
比如[Paths]
....
....
我改成
换行
[Paths]
....
....
我把原来的第一行换了一行就可以读出来了。怎么回事,而且我通过直接读取文件的方式也
就是第一行的 [ 符号变成乱码。
比如[Paths]
....
....
我改成
换行
[Paths]
....
....
我把原来的第一行换了一行就可以读出来了。怎么回事,而且我通过直接读取文件的方式也
就是第一行的 [ 符号变成乱码。
#14
各位,怎么转换呀读取ini文件的时候?没人遇过这样的问题吗
#15
我还发现这个文件打开后另存为“编码”默认是utf-8
而我新建的普通文本做成的ini文件打开后另存“编码”默认是Ansi,是不是
编码问题导致读取不了?还需要经过何种转换
而我新建的普通文本做成的ini文件打开后另存“编码”默认是Ansi,是不是
编码问题导致读取不了?还需要经过何种转换
#1
注意字符的类型 大小写
#2
都是直接拷贝过来的呀。读取section段的消息'SectionExists'根本不执行。说明根本没读取到
#3
我另外新建一个ini文件,把原来的ini文件内容直接拷贝到新建的ini文件里,可以读取出来。但是就是无法读取原来的ini文件,我复制原来的ini文件,读这个复制的文件也同样读取不到。就是原先建好的无法读取,非要新建一个才能读取
#4
哪位能帮忙在自己的机器上试一下看看呀。不是自己新建的,就是读取遨游目录下的已存在的那个配置文件看是否能读取出来
#5
可能和存放的字符编码有关吧
#6
{配置文件读写}
if FileExists(AppPath + 'xxx.ini') then
begin
MyIni := TIniFile.Create(AppPath + 'xxx.ini');
EditPort.Text := MyIni.ReadString('set', 'aaa', '');
EditKey.Text := MyIni.ReadString('set', 'bbb', '');
MyIni.Destroy;
end
else
begin
MyIni := TIniFile.Create(AppPath + 'xxx.ini');
MyIni.WriteString('set', 'aaa', 111);
MyIni.WriteString('set', 'bbb', 222);
MyIni.Destroy;
end;
if FileExists(AppPath + 'xxx.ini') then
begin
MyIni := TIniFile.Create(AppPath + 'xxx.ini');
EditPort.Text := MyIni.ReadString('set', 'aaa', '');
EditKey.Text := MyIni.ReadString('set', 'bbb', '');
MyIni.Destroy;
end
else
begin
MyIni := TIniFile.Create(AppPath + 'xxx.ini');
MyIni.WriteString('set', 'aaa', 111);
MyIni.WriteString('set', 'bbb', 222);
MyIni.Destroy;
end;
#7
看了楼主的杰作认为有点搞笑,
首先你查找的项未找到,说明此项在文件中不存在,但你后面加载了一个语句是
FiniFile.WriteString('Settings','LoadAllIEPlugin','1');
而后,点击第二次按钮事件就发现会出现对话框,
你以为第一次的INI文件有问题,就又创建了一个空的INI文件,并考备了第一次按钮事件后的INI文件内容,
呵呵
此时的 'Settings','LoadAllIEPlugin','1' 这一项是已经存在的,
试问LZ,
你是写代码急晕了吗?
首先你查找的项未找到,说明此项在文件中不存在,但你后面加载了一个语句是
FiniFile.WriteString('Settings','LoadAllIEPlugin','1');
而后,点击第二次按钮事件就发现会出现对话框,
你以为第一次的INI文件有问题,就又创建了一个空的INI文件,并考备了第一次按钮事件后的INI文件内容,
呵呵
此时的 'Settings','LoadAllIEPlugin','1' 这一项是已经存在的,
试问LZ,
你是写代码急晕了吗?
#8
楼主不要急,把思路理清楚
需要说明的是:
FiniFile.WriteString('Settings','LoadAllIEPlugin','1');
这个write动作,如果原来没有settings节,则会自动创建这个节
需要说明的是:
FiniFile.WriteString('Settings','LoadAllIEPlugin','1');
这个write动作,如果原来没有settings节,则会自动创建这个节
#9
回复liuhuan992,那个确实应该放在判断里面。这个没错。
但是我把那段writestring的屏蔽了,不写总可以吧。
但是不屏蔽FiniFile.WriteString('Settings','LoadAllIEPlugin','1'); 却又能添加一个新的'Settings'+LoadAllIEPlugin,则还是说明上面的判断没执行,因为如果存在这个的的'Settings'的话,应该是直接更新原来已经存在的LoadAllIEPlugin的键值,而不是又重新添加一个新的一样的Section呀,也就是说根本就是忽略了原来的同样的Section,重新创建一个新的Section
但是我把那段writestring的屏蔽了,不写总可以吧。
但是不屏蔽FiniFile.WriteString('Settings','LoadAllIEPlugin','1'); 却又能添加一个新的'Settings'+LoadAllIEPlugin,则还是说明上面的判断没执行,因为如果存在这个的的'Settings'的话,应该是直接更新原来已经存在的LoadAllIEPlugin的键值,而不是又重新添加一个新的一样的Section呀,也就是说根本就是忽略了原来的同样的Section,重新创建一个新的Section
#10
同样的代码我目录改成windows下的一个配置文件('C:\WINDOWS\win.ini'),
但是能修改成功,直接修改了一个,而不是又增加了一个新的Section
procedure TForm1.Button1Click(Sender: TObject);
var
FIniFile: TIniFile;
begin
FIniFile := TIniFile.Create('C:\WINDOWS\win.ini');
try
if FiniFile.SectionExists('SciCalc') then begin
showmessage('SectionExists');
if FiniFile.ValueExists('SciCalc','layout') then
showmessage('ValueExists');
end;
FiniFile.WriteString('SciCalc','layout','1');
finally
FreeAndNil(FIniFile);
end;
end;
现在的问题是,是不是文件有什么问题?还是说ini文件是不是在什么情况需要进行什么特别处理
各位有遨游的能否做个demo测试一下那个文件来修改一下里面的参数看能否成功,就知道我说的
问题了
但是能修改成功,直接修改了一个,而不是又增加了一个新的Section
procedure TForm1.Button1Click(Sender: TObject);
var
FIniFile: TIniFile;
begin
FIniFile := TIniFile.Create('C:\WINDOWS\win.ini');
try
if FiniFile.SectionExists('SciCalc') then begin
showmessage('SectionExists');
if FiniFile.ValueExists('SciCalc','layout') then
showmessage('ValueExists');
end;
FiniFile.WriteString('SciCalc','layout','1');
finally
FreeAndNil(FIniFile);
end;
end;
现在的问题是,是不是文件有什么问题?还是说ini文件是不是在什么情况需要进行什么特别处理
各位有遨游的能否做个demo测试一下那个文件来修改一下里面的参数看能否成功,就知道我说的
问题了
#11
找到读不出的原因了,但是该如何解决???
我写了下面的代码读取
FileContent := TStringList.Create;
if FileExists('C:\Program Files\Maxthon2.5.4\SharedAccount\Config\Plugins.ini') then
begin
FileContent.LoadFromFile('C:\Program Files\Maxthon2\SharedAccount\Config\Plugins.ini');
showmessage(FileContent.Text);
//自己写代码操作吧。
end;
消息框弹出的本来应该是[Paths]才是正确的,但是消息框弹出的确是 楉煆Paths],前面的
[ 变了“楉煆”乱码难怪读取不到,所以才创建了一个[Paths]。但是我直接打开ini文件看的又是两个[Paths]这种应该如何处理呀?不可能先删除ini文件再重新创建吧。是否需要转码一类的工作
我写了下面的代码读取
FileContent := TStringList.Create;
if FileExists('C:\Program Files\Maxthon2.5.4\SharedAccount\Config\Plugins.ini') then
begin
FileContent.LoadFromFile('C:\Program Files\Maxthon2\SharedAccount\Config\Plugins.ini');
showmessage(FileContent.Text);
//自己写代码操作吧。
end;
消息框弹出的本来应该是[Paths]才是正确的,但是消息框弹出的确是 楉煆Paths],前面的
[ 变了“楉煆”乱码难怪读取不到,所以才创建了一个[Paths]。但是我直接打开ini文件看的又是两个[Paths]这种应该如何处理呀?不可能先删除ini文件再重新创建吧。是否需要转码一类的工作
#12
1、是不是文件读写权限问题?
2、是不是文件编码(gb2312、utf-8/16)的问题?
2、是不是文件编码(gb2312、utf-8/16)的问题?
#13
就是一个ini文件呀。我发现这个ini文件通过直接读取文件的方式,文件都是第一行会这样
比如[Paths]
....
....
我改成
换行
[Paths]
....
....
我把原来的第一行换了一行就可以读出来了。怎么回事,而且我通过直接读取文件的方式也
就是第一行的 [ 符号变成乱码。
比如[Paths]
....
....
我改成
换行
[Paths]
....
....
我把原来的第一行换了一行就可以读出来了。怎么回事,而且我通过直接读取文件的方式也
就是第一行的 [ 符号变成乱码。
#14
各位,怎么转换呀读取ini文件的时候?没人遇过这样的问题吗
#15
我还发现这个文件打开后另存为“编码”默认是utf-8
而我新建的普通文本做成的ini文件打开后另存“编码”默认是Ansi,是不是
编码问题导致读取不了?还需要经过何种转换
而我新建的普通文本做成的ini文件打开后另存“编码”默认是Ansi,是不是
编码问题导致读取不了?还需要经过何种转换