这是代码。
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"然后单击“保存”按钮以使用其输入替换现有行。在这种情况下,设置是音量。
应用程序运行完全正常,但在点击保存并进入设置文件后,我的输入未被保存。
答案 0 :(得分:1)
保存文件的方式应该有所改变。 保存文件的每一行,如果需要,可以进行编辑。
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!");
}
答案 1 :(得分:1)
我认为您的代码存在一些独立的问题:
替换功能
string replaceline = (line.Replace(line, textBoxText));
Replace接受要查找的字符串和要替换它的字符串。你的第一个参数是'line',所以它会用textBoxText
中的值替换整行。我假设您只想用该值替换该行的一部分。在这种情况下,您需要使用line.Replace(searchString, textBoxText)
之类的内容,您之前已将searchString定义为要替换的文本。如果您不知道该值是什么,但有一个模式,您可能希望使用regular expressions来定义要搜索和替换的模式。
WriteAllText函数
File.WriteAllText(@"F:\Bioshock2SP.ini", settingLine);
此行将使用settingLine中的值替换BioShock2SP.ini的全部内容。这里有两个问题。
settingLine
是替换前保存的值 - 因此它没有包含替换操作的结果。您应该使用replaceline
(假设它已被正确修改)。settingLine
中的值替换整个文件 - 这可能不是你想要的。你最好修改数组中的行并使用File.WriteAllLines
重新输出整个数组 - 假设文件中有多行。上面的提示可以帮助您解决这个问题 - 要正确回答这个问题,我需要看一下文件的样子,以及您要替换的模式。