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 操作Ini文件

delphi创建文件和读取.ini文件怎么写

delphi中怎么读取ini文件第2行

Delphi TListView(TListBox+图标显示)

delphi中如何读取ini文件中的内容,并显示在edit中,需要执行程序后edit中就显示

Delphi 6中绑定到数据库的多选列表框