我曾经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
Run Code Online (Sandbox Code Playgroud)
我的代码:
var
inf : TiniFile;
list : TStringList;
begin
//Create
inf := TIniFile.Create(infPath);
list := TStringList.Create;
inf.ReadSectionValues('AMD.Mfg', list);
Memo1.Lines.AddStrings(list2);
end;
Run Code Online (Sandbox Code Playgroud)
它显示这个:
%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
Run Code Online (Sandbox Code Playgroud)
我猜相同的身份导致了这一点,所以我的问题是当身份相同时如何阅读它?
TIniFile是Windows API调用读取/写入INI文件的包装器,因此受限于Windows API支持的内容,特别是对于GetPrivateProfileString
AFAIK没有正式的文件格式定义,正如您刚刚发现的那样,Microsoft实现不支持重复键,因为该函数始终返回第一次出现.
如果您在ReadSectionValues实施看近,你会发现它首先读取区域的键,然后检索键值在一个循环中,因为这是要走的路与中提到GetPrivateProfileString功能,因此越来越为所有相同的值电话.
我的建议是停止使用TIniFile来读取非INI文件的文件.
你对"读"的意思非常模糊.实际上你可以通过Delphi的任何手段阅读该文件.我亲自读过它TStringList.LoadFromFile
问题是你读完后会做什么......
您也可以尝试TMemIniFile这样做的机会.但我个人当然避免使用任何与INI相关的方法,因为这些文件与mbasic INI前提有很大的偏差,任何与INI相关的库都可能在任何使用它的程序升级时改变其实现.