Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.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
C# 编写更改ini文件中值的工具的更好方法是什么?_C# - Fatal编程技术网

C# 编写更改ini文件中值的工具的更好方法是什么?

C# 编写更改ini文件中值的工具的更好方法是什么?,c#,C#,所以为了好玩,我决定写一个工具,加载游戏的ini文件,然后让你改变某些东西的值 我这样做的方式是,在最初的ini中,我找到了变量所在的行号,然后删除了代码中的变量名,只留下它保存的值,并将其写入文本框 我很难解释事情,所以澄清一下,在这个特定的ini文件中,第42行是什么: 正常行走速度=200 在代码中,我这样做是为了将数字写入文本框: WalkSpeedTxtBox.Text = GameLocation.DefaultGameIniLines[42].Replace("NormalWalk

所以为了好玩,我决定写一个工具,加载游戏的ini文件,然后让你改变某些东西的值

我这样做的方式是,在最初的ini中,我找到了变量所在的行号,然后删除了代码中的变量名,只留下它保存的值,并将其写入文本框

我很难解释事情,所以澄清一下,在这个特定的ini文件中,第42行是什么:

正常行走速度=200

在代码中,我这样做是为了将数字写入文本框:

WalkSpeedTxtBox.Text = GameLocation.DefaultGameIniLines[42].Replace("NormalWalkSpeed=", "");
要更改它,这是按钮的代码:

GameLocation.DefaultGameIniLines[42] = "NormalWalkSpeed=" + walkspeed;
System.IO.File.WriteAllLines(GameLocation.DefaultGameIniLocation, GameLocation.DefaultGameIniLines);
MessageBox.Show("Success! Walk speed has been set to " + WalkSpeedTxtBox.Text);
System.Media.SystemSounds.Beep.Play();
很明显,如果ini文件与以前不完全相同,就像行中的更改一样,这将不再有效,我必须重写所有内容


做我想做的事情,有什么更好的方法呢?

您可以尝试在文件中找到该字符串,如果找到,您可以获取它的值

  using (var reader = new StreamReader(file))
    {
        while (!reader.EndOfStream)
        {
            var line = reader.ReadLine();
            if (line.Contains("NormalWalkSpeed="))
                {
                   //get its value
                }
         }
    }

INI文件是结构化配置文件,允许您查找给定组和键的值。将其视为一个连续的行集合将忽略这一点,而将每一行视为一组文本意味着需要做更多的工作

假设您希望自己编写此代码而不是使用,最好的方法是运行INI文件,将其转换为字典字典。字典是最有意义的数据结构,因为它允许您通过组名访问键集合,并通过键名访问值

大概是这样的:

Dictionary<string, Dictionary<string,string>> Groups = new...
string currentGroupName;
foreach (string line in File.ReadAllLines(iniFile))
{
    if (lineStartsWith("[") && line.EndsWith("]"))
    {
        currentGroupName = line.Substring(1, line.Length-2);
        Groups.Add(currentGroupName, new Dictionary<string,string>());
    }
    else if (line.Contains("="))
    {
        string[] keyValue = line.Split("=");
        Groups[currentGroupName].Add(keyValue[0], keyValue[1]);
    }

}

大致上,这将允许您迭代所有组及其键,以获得值。然后,您可以从中构造一个字符串列表以进行保存。

已询问并回答:您应该查看=字符之前的内容-这是变量的名称。找到正确的,然后阅读/修改=-后面的内容,这就是值。非常感谢Steve。