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