我使用TiniFile读取了一个inf文件。但在某些部分,标识是相同的,TiniFile无法读取它。
例如:
本节内容:
[AMD.Mfg]
%AMD.DeviceDesc0% = AMDSMBus, PCI\VEN_1002&DEV_4353
%AMD.DeviceDesc0% = AMDSMBus, PCI\VEN_1002&DEV_4363
%AMD.DeviceDesc0% = AMDSMBus, PCI\VEN_1002&DEV_4372
%AMD.DeviceDesc0% = AMDSMBus, PCI\VEN_1002&DEV_4385
%AMD.DeviceDesc0% = AMDSMBus, PCI\VEN_1022&DEV_780B我的代码:
var
inf : TiniFile;
list : TStringList;
begin
//Create
inf := TIniFile.Create(infPath);
list := TStringList.Create;
inf.ReadSectionValues('AMD.Mfg', list);
Memo1.Lines.AddStrings(list2);
end;它显示以下内容:
%AMD.DeviceDesc0%=AMDSMBus, PCI\VEN_1002&DEV_4353
%AMD.DeviceDesc0%=AMDSMBus, PCI\VEN_1002&DEV_4353
%AMD.DeviceDesc0%=AMDSMBus, PCI\VEN_1002&DEV_4353
%AMD.DeviceDesc0%=AMDSMBus, PCI\VEN_1002&DEV_4353
%AMD.DeviceDesc0%=AMDSMBus, PCI\VEN_1002&DEV_4353我猜是同一个ident造成的,所以我的问题是,当ident是相同的时候,如何阅读它?
发布于 2013-01-11 17:08:02
你很含糊地说“读”是什么意思。实际上,你可以通过Delphi的任何一种方法来读取这个文件。就我个人而言,我是用TStringList.LoadFromFile阅读的
问题是在你读完之后你会怎么做…
您也可以尝试使用TMemIniFile来做这件事。但我个人肯定避免了任何与INI相关的方法,因为这些文件严重背离了基本的INI前提,任何与INI相关的库都可能在任何升级时改变其实现,从而破坏使用它的程序。
发布于 2013-01-11 16:46:36
TIniFile是用于读/写INI文件的Windows API调用的包装器,因此,Windows API支持的内容是有限的,特别是对于GetPrivateProfileString
AFAIK没有文件格式的正式定义,而且,正如您刚刚发现的,Microsoft实现不支持重复的键,因为该函数总是在第一个出现时返回。
如果仔细观察ReadSectionValues实现,您会注意到它首先读取区段键,然后在循环中检索键值,因为这是前面提到的GetPrivateProfileString函数的方法,因此它在所有调用中都获得相同的值。
我的建议是停止使用TIniFile读取非INI文件的文件。
https://stackoverflow.com/questions/14274331
复制相似问题