如何读取inf文件?

Han*_*lin 3 delphi ini inf

我曾经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)

我猜相同的身份导致了这一点,所以我的问题是当身份相同时如何阅读它?

jac*_*ate 8

TIniFile是Windows API调用读取/写入INI文件的包装器,因此受限于Windows API支持的内容,特别是对于GetPrivateProfileString

AFAIK没有正式的文件格式定义,正如您刚刚发现的那样,Microsoft实现不支持重复键,因为该函数始终返回第一次出现.

如果您在ReadSectionValues实施看近,你会发现它首先读取区域的键,然后检索键值在一个循环中,因为这是要走的路与中提到GetPrivateProfileString功能,因此越来越为所有相同的值电话.

我的建议是停止使用TIniFile来读取非INI文件的文件.


Ari*_*The 5

你对"读"的意思非常模糊.实际上你可以通过Delphi的任何手段阅读该文件.我亲自读过它TStringList.LoadFromFile

问题是你读完后会做什么......

您也可以尝试TMemIniFile这样做的机会.但我个人当然避免使用任何与INI相关的方法,因为这些文件与mbasic INI前提有很大的偏差,任何与INI相关的库都可能在任何使用它的程序升级时改变其实现.