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

本文关键字:文档 代码 文本 何替换 替换 | 更新日期: 2023-09-27 18:13:06

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

的例子:其中一个数字是一个分数。我想做的就是在文本文档中更改文本后的一行文本。文本是行后面的值的描述。在文本文件中有一行"Score: score_value",score_value应该是Score NummericUpDown的值。

我认为我应该在文本中以与Winform相同的顺序制作行,但我不确定什么是最好的。现在唯一可以工作的是编写并替换第一行:

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;
        }

最好的方法是什么?

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

如果文件很小,可以将整个文本复制到内存中,然后再写回文件

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

将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. 应用程序和用户设置。(MSDN)
  2. 创建一个设置类并将其序列化为XML (MSDN)或JSON (MSDN)。还有一个更可定制的XML序列化器(MSDN),但是当您不需要匹配特定的预定义XML模式,而只是想要某种存储数据的格式时,DataContractSerializer似乎更适合。

如果你有更复杂的数据存储需求,我会指出你的实体框架和localdb SQL存储,但这将是巨大的多余的在这里