如何将新项添加到保存在C#中的文本文件中的KeyValuePair

时间:2016-08-11 14:12:20

标签: c#

  • 我正在生成图书序列号并保存到keyvalue对 然后保存到文本文件,每个键都是唯一的。

  • 当我将其保存到文本文件时,生成密钥,我可以检索密钥,它可以正常工作。

  • 当我生成第二个密钥并将其保存到文本文件时,它会覆盖文本文件并删除以前生成的密钥。

生成密钥:

private void GenerateButton1_Click(object sender, EventArgs e)
        {

            if (comboBox1.SelectedIndex == 0)
            {
                BookcomboBox2.Items.Clear();

                from = int.Parse(FrmtextBox1.Text);
                to = int.Parse(TotextBox2.Text);

                result = to - from;

                for (int i = 0; i <= result; i++)
                {
                    string item = Convert.ToString(from + i); 
                    BookcomboBox2.Items.Add(item);
                    vals.Add(new KeyValuePair<int, string>(0, item)); // 
                }
                MessageBox.Show("Book No 1,  Generated Successfully", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            if (comboBox1.SelectedIndex == 1)
            {
                BookcomboBox2.Items.Clear();

                from = int.Parse(FrmtextBox1.Text);
                to = int.Parse(TotextBox2.Text);

                result = to - from;

                for (int i = 0; i <= result; i++)
                {
                    string item = Convert.ToString(from + i);
                    BookcomboBox2.Items.Add(item);
                    vals.Add(new KeyValuePair<int, string>(1, item)); // CatA has 0 key value
                }
                MessageBox.Show("Book No-2 Generated Successfully", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

保存密钥

private void Savebutton1_Click(object sender, EventArgs e)
        {

            using (StreamWriter sw = File.CreateText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Books.txt")))
            {

                string json = JsonConvert.SerializeObject(vals);
                sw.Write(json);
            }
            MessageBox.Show("Books Saved Successfully", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);

        }

当我添加新书时,之后又保存,而不是用Book-2附加,它只用book-2覆盖文件,之前创建的book-1被删除。

p.s:如果问题听起来有点混乱,请询问。

被修改

patrick给出的解决方案正在发挥作用,但在再次阅读时它给了我这个错误:

ERROR

当我检查文件时,我注意到了这一点:

Append

2 个答案:

答案 0 :(得分:5)

问题是File.CreateText()会覆盖该文件(如果文件已存在)。

如果要附加到现有文件,可以使用new StreamWriter(path, append: true)代替

答案 1 :(得分:0)

我找到了正确解决这个问题的方法!

仔细阅读本文:

  
    

假设您必须将用户添加到现有的JSON文件中     基本方法是:

  
     
      
  •     

    读取/解析JSON文件以获取内存中数据结构

      
  •   
     
    
        
  • 修改数据结构以添加用户。
  •     
  
     
      
  •     

    将数据结构解析/写入文件的新副本。

      
  •   
  •     

    无法在JSON文件上进行就地更新。

      
  •   

来自:How to write to a JSON file using C#?

基本上,您将反序列化您添加项目的完全相同的词典。

我已将此代码添加到&#34;生成按钮&#34;在生成之前我反序列化我的exising文件并添加回我要添加新项目的相同字典&#34;变量名称应该完全相同!&#34;

     if (File.Exists("Books.txt"))
            {
                string jsonToRead = File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Books.txt"));
                vals =
                    JsonConvert.DeserializeObject<List<KeyValuePair<int, string>>>(jsonToRead);
            }

通过这种方式,我从文本文件加载现有数据并使用新数据重新编写。那就是它。