代码如下
private void SaveButton_Click(object sender, EventArgs e)
{
string textBoxText = TextBox.Text;
var lines = File.ReadAllLines(@"F:Bioshock2SP.ini");
foreach(string line in lines)
{
if (line.Contains("VoVolume="))
{
//This is where I get confused.
string settingLine = line;
string replaceline = (line.Replace(line, textBoxText));
File.WriteAllText(@"F:Bioshock2SP.ini", settingLine);
}
break;
}
MessageBox.Show("Setting saved!");
}
这个想法是替换我玩的游戏的Settings.ini文件中的一部分设置,使用我的表单中的文本框的用户输入。用户输入一个数字,例如"1.56",然后点击保存按钮,用他们的输入替换现有的行。在这个例子中,这个设置就是音量。
应用程序运行完全正常,但在点击保存并进入设置文件后,我的输入没有保存。
保存文件的方式应该有所改变。保存文件的每一行,如果需要的话进行编辑。
void SaveButton_Click(object sender, EventArgs e)
{
var textBoxText = TextBox.Text;
var lines = File.ReadAllLines(@"F:Bioshock2SP.ini");
using (var file = new StreamWriter(@"F:Bioshock2SP.ini"))
foreach(string line in lines)
{
if (line.Contains("VoVolume="))
file.WriteLine(line.Substring(0, 9) + textBoxText); // Writes something like 'VoVolume=1.56'
else file.WriteLine(line); // No editing required
}
MessageBox.Show("Setting saved!");
}
我认为你的代码有几个单独的问题:
-
替换函数
string replaceline = (line.Replace(line, textBoxText));
Replace接受要查找的字符串和要替换它的字符串。你的第一个参数是'line',所以它会用
textBoxText
中的值替换整行。我假设您只想用该值替换该行的一部分。在这种情况下,您需要使用类似line.Replace(searchString, textBoxText)
的东西,其中您先前已将searchString定义为要替换的文本。如果你不知道这个值是什么,但是有一个模式,你可能想看看使用正则表达式,它可以让你定义一个模式来搜索和替换。 -
WriteAllText函数
File.WriteAllText(@"F:Bioshock2SP.ini", settingLine);
这一行将用settingLine中的值替换BioShock2SP.ini的全部内容。这里有两个问题。
- 一个是
settingLine
是在你做替换之前保存的值-所以它没有包括你的替换操作的结果。您应该使用replaceline
(假设它已被正确修改)。 - 即使你这样做了,另一个是那个文件。WriteAllText将用
settingLine
中的值替换整个文件-这可能不是您想要的。您最好修改数组中的行并使用File.WriteAllLines
重新输出整个数组-假设文件中有多行。
- 一个是
上面的提示可能会帮助你解决这个问题,但要正确回答这个问题,我需要看到一个文件的样例,以及你想要替换的模式。