【问题标题】:ReadValue from INI File从 INI 文件中读取值
【发布时间】:2014-02-20 21:54:50
【问题描述】:

我是C# 的“新”初学者,在做我的项目时,我遇到了一个我无法用我的知识解决的问题。我尝试了很多,但它对我没有用,所以我希望能得到一些帮助。

public void ReadValue()
{
  foreach(string cat in this.ini.iniGetCategories())
   {
     textbox1.Text = string.Join(Environment.NewLine , this.ini.iniGetCategories()) + Environment.NewLine + string.Join(Environment.NewLine, this.ini.iniReadValue(cat,"Key");
   }
}

this.ini.iniGetCategories() - 从我的 INI 中读取所有部分 - 工作正常

this.ini.iniReadValue(string Section, string Key) - 从部分的键中读取值

主要问题是,它给了我所有的 Section - 名称,但它只给了我 INI 中的最后一个 Key + Value 而忽略了另一个

29.01.2014 - 10.00 我的实际代码只给了我“1 个部分 + 1 个值”。其他的还不见了……

StringBuilder strbuild1 = new StringBuilder();


            foreach (string cat in this.ini.IniGetCategories())
            {
                strbuild1.Append(cat + Environment.NewLine);

                foreach (string ccat in this.ini.IniGetCategories())
                {
                    strbuild1.Append(this.ini.IniReadValue(ccat, "Betreff"));
                }
            }

            textBox1.Text = strbuild1.ToString();

【问题讨论】:

  • @Schrader 你的内部循环不应该遍历类别而是遍历键。由于这是您的项目,我想您自己编写了这些方法?你需要例如一个方法public List<string> ReadKeys(string section)
  • @WimOmbelets 现在我的内部循环遍历我的this.ini.iniGetKeys - 方法我将两个循环都添加到我的Stringbuilder 但最终再次获得一个值...而且我只需要一个键中的值“贝特雷夫”

标签: c# foreach ini


【解决方案1】:

您的foreach 循环每次都会分配textbox1.Text,因此只有this.ini.iniGetCategories() 中的最后一个cat 将用于将检索到的值分配给TextBox,这是完全正常的。

如果我的假设是正确的,您希望在 TextBox 中包含所有类别名称,您将首先构造一个 String(使用 += 运算符,或者最好使用 @ 987654329@ 类,并且只有在 foreach 循环的范围结束之后,您才会将该字符串分配给您的 TextBoxText 属性。

实现此目的的一种简单易读的方法是使用双嵌套循环。

一般的想法是:对于节集合中的每个节,然后针对该特定节的键集合中的每个键

【讨论】:

  • 我为我的部分创建了一个foreach,一个foreach 用于读取密钥,append 然后是Stringbuilder 但现在我只得到第一个值...
  • @Schrader 请扩展您的问题以显示您上次尝试的代码
  • 它的工作完美......将这两个信息(SectionKey)提供给两个Stringbuilder 将它们带到我的textbox 并清除Stringbuilder 并用@987654342 重复此操作@ 非常感谢!
【解决方案2】:

正如 Wim 提到的,使用 += 运算符对您的情况很有用。

public void ReadValue()
{
  foreach(string cat in this.ini.iniGetCategories())
   {
     textbox1.Text += string.Join(Environment.NewLine , this.ini.iniGetCategories());
     textbox1.Text += string.Join(Environment.NewLine, this.ini.iniReadValue(cat,"Key");
   }
}

【讨论】:

  • 工作,但它只给了我一个“部分”的“价值”,我需要为所有“部分”获取“关键”的“价值”
  • 您需要为每个部分循环一个部分中的每个键:这会喊出嵌套循环。我已经修改了答案。
【解决方案3】:

很抱歉这个无耻的插件,但我想介绍一下我创建的库 IniParser。 MIT 许可证(甚至可以在专有代码中使用) 用 c# 编写,没有外部绑定,因此它不包含任何操作系统中的依赖项,这使其与 Mono 兼容。

你可以check out the source in GitHub,是also available as a NuGet package

它是heavily configurablereally simple to use

希望对任何重新访问此答案的人有所帮助。

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 2012-06-29
    • 2013-08-02
    • 2017-04-10
    • 2015-10-01
    • 2013-09-15
    • 2014-03-16
    • 2021-02-28
    • 1970-01-01
    相关资源
    最近更新 更多