2016-08-11 29 views
1
  • 我生成书序列号的,并保存到键值对其中 然后保存为文本文件,每个按键都是独一无二的。如何追加新项目KeyValuePair保存在文本文件在C#

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

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

生成密钥:

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

     } 

当我添加新的书,后来和保存,而不是用书本2追加它覆盖只有第2册的文件,先前创建的第1本书被删除。

p.s:如果问题听起来令人困惑,请询问。

编辑帕特里克给出

解决方案工作,但再次阅读时,它给我这个错误:

ERROR

,当我检查,我注意到这个文件:

Append

+0

这是你的全部代码吗? – lordkain

+0

把断点放在 'string json = JsonConvert.SerializeObject(vals);' vals的内容是什么,当你的第二次写作开始时? –

+0

vals包含第一本书。当第二个被添加,并重写vals时,第一个被删除的第二本书仍然存在。 – Patrick

回答

0

我已经找到了正确的解决这个问题!

请仔细阅读这样的文字:

假设你有将用户添加到现有的JSON文件,该 基本做法是:

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

  • 修改数据结构,添加的用户。
  • Unparse /数据结构写入文件的新副本。

  • 有没有办法做到更新就地一个JSON文件。

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

基本上你将反序列化在其中添加项目完全相同的字典。

我在生成之前在“生成按钮”的顶部添加了这段代码我正在反序列化我的exising文件并添加回到我将添加新项目的相同字典中“变量名称应该完全相同! “

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

这样,我加载我现有的文本文件,并重新写入新的数据。而已!。

5

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

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

+0

这是可行的,但是当我再次阅读时,它会给我错误,请检查我编辑的问题。 – Patrick

+0

这个答案的问题是:它将键值对追加到数组的末尾,而不是放在抛出错误的数组中,“读取JSON内容后遇到的其他文本[。当你想要再次读取数据,因为它是这样创建的。 '[{Array1}] < - FOR JSON在这里结束了,它会抛出错误,我发现这个 - >“[” - > [Array2 ]' – Patrick

相关问题