我正在生成图书序列号并保存到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给出的解决方案正在发挥作用,但在再次阅读时它给了我这个错误:
当我检查文件时,我注意到了这一点:
答案 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);
}
通过这种方式,我从文本文件加载现有数据并使用新数据重新编写。那就是它。