Delphi读INI文件小节到TListBox的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi读INI文件小节到TListBox的问题相关的知识,希望对你有一定的参考价值。
Delphi读INI文件小节到TListBox的问题
有一个INI文件,小节数有2000左右,我想将其读入一ListBox中,发现只能读640个小节,是不是INI读取有限制,还是其它原因?
如下程序:
var sSelTxt,sNow:string;
MyIniFile: TIniFile;
sStrList:TStrings;
i:integer;
begin
try
sStrList := TStringList.Create;
MyIniFile:= TIniFile.Create(sDir+'\'+'Info.ini');
MyIniFile.ReadSections(sStrList);
//MyIniFile.ReadSections(ListBox2.Items); 也可这样直接取数
with ListBox2 do begin
Items.Assign(sStrList);
ItemIndex := 0;
end;
finally
sStrList.free;
MyIniFile.Free;
end; //end try
end;
试了 TheFiend 的方法,不行;
我看应该是TStrings的问题,“sStrList”读出来就只有640小节,请问有解决方法吗?谢谢!
但是一直没有遇到这么大的ini,所以没有遇到你这个问题.
通过查看delphi源代码.发现
procedure TIniFile.ReadSections(Strings: TStrings);
const
BufSize = 16384;
var
Buffer, P: PChar;
begin
GetMem(Buffer, BufSize);
try
Strings.BeginUpdate;
try
Strings.Clear;
if GetPrivateProfileString(nil, nil, nil, Buffer, BufSize,
PChar(FFileName)) <> 0
then
begin
P := Buffer;
while P^ <> #0 do
begin
Strings.Add(P);
Inc(P, StrLen(P) + 1);
end;
end;
finally
Strings.EndUpdate;
end;
finally
FreeMem(Buffer, BufSize);
end;
end;
它只读取了 16384 个字节.所以存在限制.楼主可以自己手动改一下. 参考技术A 以前听说过ini的大小是有限制的,所以大量的数据不要用ini来存储。可以考虑用Txt或者xml
QSettings 读/写ini配置文件中的数组数据
以前项目中读写ini配置文件,都是以单个key-value形式进行读写,现在项目中又用到了需要把数据数组放置到ini配置文件中,这里结合Qt官方文档进行验证和总结。
配置文件中数据格式,存放三组数据,如图1所示:
图1
1、写入数据
1 void WriteIni() { 2 QList<Login> logins_list; 3 Login log1; 4 log1.userName = "test1"; 5 log1.password = "1111"; 6 logins_list.append(log1); 7 8 Login log2; 9 log2.userName = "test2"; 10 log2.password = "2222"; 11 logins_list.append(log2); 12 Login log3; 13 log3.userName = "test3"; 14 log3.password = "3333"; 15 logins_list.append(log3); 16 17 QSettings settings("config.ini", QSettings::IniFormat); 18 settings.beginWriteArray("BaseInfo"); 19 for (int i = 0; i < logins_list.size(); ++i) { 20 settings.setArrayIndex(i); 21 settings.setValue("password", logins_list.at(i).password); 22 settings.setValue("userName", logins_list.at(i).userName); 23 } 24 settings.endArray(); 25 }
2、读取数据
1 void ReadIni() { 2 QList<Login> logins; 3 4 QSettings settings("config.ini", QSettings::IniFormat); 5 int size = settings.beginReadArray("BaseInfo"); 6 for (int i = 0; i < size; ++i) { 7 settings.setArrayIndex(i); 8 Login login; 9 login.userName = settings.value("userName").toString(); 10 login.password = settings.value("password").toString(); 11 logins.append(login); 12 } 13 settings.endArray(); 14 15 for (int i = 0; i < logins.length(); ++i) { 16 qDebug() << logins[i].userName; 17 qDebug() << logins[i].password; 18 } 19 }
以上是关于Delphi读INI文件小节到TListBox的问题的主要内容,如果未能解决你的问题,请参考以下文章
Delphi TListView(TListBox+图标显示)