首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何读取inf文件?

如何读取inf文件?
EN

Stack Overflow用户
提问于 2013-01-11 16:33:47
回答 2查看 676关注 0票数 3

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

例如:

本节内容:

代码语言:javascript
复制
[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

我的代码:

代码语言:javascript
复制
    var
      inf : TiniFile;
      list : TStringList;
    begin
      //Create
      inf := TIniFile.Create(infPath);
      list := TStringList.Create;  
      inf.ReadSectionValues('AMD.Mfg', list);
      Memo1.Lines.AddStrings(list2);
    end;

它显示以下内容:

代码语言:javascript
复制
%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是相同的时候,如何阅读它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-11 17:08:02

你很含糊地说“读”是什么意思。实际上,你可以通过Delphi的任何一种方法来读取这个文件。就我个人而言,我是用TStringList.LoadFromFile阅读的

问题是在你读完之后你会怎么做…

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

票数 5
EN

Stack Overflow用户

发布于 2013-01-11 16:46:36

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

AFAIK没有文件格式的正式定义,而且,正如您刚刚发现的,Microsoft实现不支持重复的键,因为该函数总是在第一个出现时返回。

如果仔细观察ReadSectionValues实现,您会注意到它首先读取区段键,然后在循环中检索键值,因为这是前面提到的GetPrivateProfileString函数的方法,因此它在所有调用中都获得相同的值。

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14274331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档