【问题标题】:Read ini file which does not have any section?读取没有任何部分的ini文件?
【发布时间】:2012-03-29 23:40:41
【问题描述】:

我的 ini 文件没有任何部分。它有以下数据

com.ibm.rcp.toolbox.admin/toolboxvisibleChild=false com.ibm.collaboration.realtime.community/defaultAuthType=ST-DOMINO-SSO com.ibm.collaboration.realtime.brokerbridge/startBroker=false com.ibm.collaboration.realtime.webapi/startWebContainer=true

我想使用函数。

    [DllImport("kernel32")]
    private static extern int GetPrivateProfileString(string section,
             string key,string def, StringBuilder retVal,
        int size,string filePath);

我的问题

  1. 我无法在函数中给出部分名称,因为我没有任何名称
  2. 如果我将部分名称设为 null,则不会返回任何内容
  3. 我不想使用 ReadAllText 这样的蛮力

【问题讨论】:

  • 如果你为节名传入一个空白字符串而不是 null 会发生什么?
  • 什么是GetPrivateProfileString,是外部库吗?
  • GetPrivateProfileString 和 WritePrivateProfileString 不适用于未格式化为 .ini 文件的文件 - 即缺少 [section]。 “空”并不意味着“没有部分”。它在文档中说在这里。 msdn.microsoft.com/en-us/library/windows/desktop/… 如果您想使用这种格式,我认为您可能必须编写自己的解析器(对我来说似乎还不错)或找到已经完成的开源代码。附言GetPrivateProfileString 是用于读取 INI 文件的旧 Windows API (@MattDavey)。
  • 我知道你说过你不想“蛮力”它,但是......你能把=上的每一行分开吗,左边是名字,右边是价值?如果你知道你的 .ini 文件永远不会有任何部分,并且没有像引用或转义等号这样的问题需要处理,那应该很容易。 GetPrivateProfileString 可能不会做你想做的事,因为它似乎不接受 nullstring.Empty

标签: c# .net-4.0 ini


【解决方案1】:

使用File.ReadLines 和一些 LINQ 其实还不错:

var dict = File.ReadLines("config.txt")
               .Where(line => !string.IsNullOrWhiteSpace(line))
               .Select(line => line.Split(new char[] { '=' }, 2, 0))
               .ToDictionary(parts => parts[0], parts => parts[1]);

var result = dict["com.ibm.rcp.toolbox.admin/toolboxvisibleChild"];

【讨论】:

  • 好的,谢谢.. 看起来我不能使用微软的功能,而是直接文件阅读器
  • 让我们添加这个:.Where(line => !line.Trim().StartsWith(";"))
【解决方案2】:

Here's 作者说支持无节键的库。我自己还没有尝试过这个库。
或者,您可以简单地编辑 Ini 文件并在顶部添加“标题”/节名称,然后在阅读完毕后将其删除。

【讨论】:

  • 最后,我的结论是win32不支持sectionless ini。所以最好使用dtb提到的filereader ...
猜你喜欢
  • 2013-09-13
  • 2011-05-30
  • 2015-02-17
  • 2015-08-08
  • 2012-10-09
  • 2011-03-30
  • 2014-05-10
  • 2015-01-13
  • 1970-01-01
相关资源
最近更新 更多