Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何读取inf文件?_Delphi_Ini_Inf - Fatal编程技术网

Delphi 如何读取inf文件?

Delphi 如何读取inf文件?,delphi,ini,inf,Delphi,Ini,Inf,我用文件读取inf文件。但在某些部分,标识是相同的,tinfile无法读取它 例如: 本节: [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% = AMDSM

我用
文件
读取inf文件。但在某些部分,标识是相同的,
tinfile
无法读取它

例如:

本节:

[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相同时,如何读取它?

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

顺便说一句,文件格式没有正式定义,而且,正如您刚刚发现的,Microsoft实现不支持重复键,因为函数总是第一次返回

如果仔细观察ReadSectionValues实现,您会注意到它首先读取部分键,然后在循环中检索键值,因为这是使用上述GetPrivateProfileString函数的方法,因此它为所有调用获取相同的值


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

您对“读取”的含义非常模糊。实际上,您可以通过Delphi的任何方法读取该文件。就我个人而言,我会使用
TStringList.LoadFromFile

问题是你读了之后会怎么做


您也可以尝试使用
TMemIniFile
来实现这一点。但我个人肯定会避免使用任何与INI相关的方法,因为这些文件严重偏离了mbasic INI前提,任何与INI相关的库都可能在任何升级时更改其实现,从而破坏使用它的程序。

TMemIniFile不是Win32 API包装器,但我认为它在这里也不起作用。