如何使用用户输入替换文本文件中的部分行?

时间:2016-08-17 02:06:16

标签: c#

这是代码。

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"然后单击“保存”按钮以使用其输入替换现有行。在这种情况下,设置是音量。

应用程序运行完全正常,但在点击保存并进入设置文件后,我的输入未被保存。

2 个答案:

答案 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)

我认为您的代码存在一些独立的问题:

  1. 替换功能

    string replaceline = (line.Replace(line, textBoxText));
    

    Replace接受要查找的字符串和要替换它的字符串。你的第一个参数是'line',所以它会用textBoxText中的值替换整行。我假设您只想用该值替换该行的一部分。在这种情况下,您需要使用line.Replace(searchString, textBoxText)之类的内容,您之前已将searchString定义为要替换的文本。如果您不知道该值是什么,但有一个模式,您可能希望使用regular expressions来定义要搜索和替换的模式。

  2. WriteAllText函数

    File.WriteAllText(@"F:\Bioshock2SP.ini", settingLine);
    

    此行将使用settingLine中的值替换BioShock2SP.ini的全部内容。这里有两个问题。

    1. 一个是settingLine是替换前保存的值 - 因此它没有包含替换操作的结果。您应该使用replaceline(假设它已被正确修改)。
    2. 即使你这样做,另一个是File.WriteAllText将用settingLine中的值替换整个文件 - 这可能不是你想要的。你最好修改数组中的行并使用File.WriteAllLines重新输出整个数组 - 假设文件中有多行。
  3. 上面的提示可以帮助您解决这个问题 - 要正确回答这个问题,我需要看一下文件的样子,以及您要替换的模式。