如何替换文本文档中的代码?

时间:2016-10-13 13:42:15

标签: c# winforms

我想要做的是将一些值写入文本文档。值是来自numericUpDown对象的值。

实施例: 其中一个NumericUpDown是一个分数。我想做的是在一行文本后更改文本文档中的文本。文本描述了线条背后的值。在文本文件中是一行“Score:score_value”,score_value应该是Score NummericUpDown的值。

我认为我应该以与Winform相同的顺序在txt中创建行,但我不确定什么是最好的。它现在唯一能做的就是编写和替换第一行:

private void Option_Save_Click(object sender, EventArgs e)
        {
            string Game_option_values = Score.Value.ToString();

            System.IO.StreamWriter Game_options = new System.IO.StreamWriter(@"link to file");
            Game_options.WriteLine(Game_option_values);

            Game_options.Close();
            Option_Save.Enabled = false;
        }

这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:0)

在单独的行中将7个不同的字符串值写入文本文档

        string[] multiple_values = new string[7];
        // ...
        // code to store values in multiple_values
        // ...
        File.WriteAllLines(@"link to file", multiple_values);

从文本文档中读取以前保存的字符串值

        string[] multiple_values = null;
        multiple_values = File.ReadAllLines(@"link to file");

答案 1 :(得分:0)

我询问您的用例的原因是,阅读纯文本文件并不是加载和保存设置的最简单方法。它在概念上很简单,但是当你已经有很好的轮子时,你花了太多时间重新发明轮子。

您有更简单的选择,包括验证数据和处理更复杂数据结构的方法。我从这两种方法中的一种开始:

  1. 应用程序和用户设置。 (MSDN
  2. 创建一个设置类并将其序列化为XML(MSDN)或JSON(MSDN)。还有一个更可自定义的XML序列化程序(MSDN),但是当您不需要匹配特定的预定义XML架构时,DataContractSerializer似乎更合适,但只需要一些存储数据的格式。 / LI>

    如果您有更复杂的数据存储需求,我会将您指向Entity Framework和localdb SQL存储,但这将是非常难以理解的。

答案 2 :(得分:0)

如果文件很小,您可以将整个文本复制到内存中并将其写回文件

string Game_option_values = Score.Value.ToString();
string text = File.ReadAllText(path); // Read all text to memory
text = text.Replace("score_value", Game_option_values); // replace the string with value from Form
File.WriteAllText(path, text); // Write it back to file

如果文件很大,我建议创建一个副本作为源,并将其重写回原始文件。 (因为单独覆盖原始文件可能会破坏所有内容)

string Game_option_values = Score.Value.ToString();
string newpath = path + ".bak"; 
File.Copy(path, newpath); // copy to new file
using (StreamReader sr = new StreamReader(newpath)) // open the new file
using (StreamWriter sw = new StreamWriter(path, false)) // overwrite the original file
{
    while(!sr.EndOfStream)
    {
        string line = sr.ReadLine(); // read per line, so it does not consume memory too much
        line = line.Replace("score_value", Game_option_values); // replace the string with the value from Form
        sw.WriteLine(line); // write per line
    }
}
// Then you can delete the new file