C# 如何向保存在C文本文件中的KeyValuePair追加新项#
我正在生成图书序列号并保存到键值对 然后保存到文本文件,每个键都是唯一的C# 如何向保存在C文本文件中的KeyValuePair追加新项#,c#,C#,我正在生成图书序列号并保存到键值对 然后保存到文本文件,每个键都是唯一的 当我将其保存到文本文件时,会生成密钥,我可以检索密钥,并且它工作正常 当我生成第二个密钥并将其保存到文本文件时,它会覆盖文本文件并删除以前生成的密钥 生成密钥: private void GenerateButton1_Click(object sender, EventArgs e) { if (comboBox1.SelectedIndex == 0)
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);
}
当我添加新书,然后保存,而不是附加book-2时,它只会覆盖book-2文件,以前创建的book-1会被删除。
p、 s:如果这个问题听起来很困惑,请提问
已编辑
patrick给出的解决方案有效,但在再次阅读时,它给了我以下错误:
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);
}
当我查看文件时,我注意到:
问题在于
File.CreateText()
将覆盖该文件(如果该文件已经存在)
如果要附加到现有文件,可以使用
new StreamWriter(path,append:true)
代替问题是file.CreateText()
将覆盖该文件(如果该文件已存在)
如果要附加到现有文件,可以使用
newstreamwriter(path,append:true)
代替我找到了这个问题的正确解决方案
仔细阅读本文:
假设您必须向现有JSON文件添加用户,则
基本方法是:
- 读取/解析JSON文件以获取内存中的数据结构
- 修改数据结构以添加用户
- 将数据结构解析/写入文件的新副本
- 无法对JSON文件进行就地更新
if(File.Exists(“Books.txt”))
{
字符串jsonToRead=File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory,“Books.txt”);
瓦尔斯=
反序列化对象(jsonToRead);
}
通过这种方式,我从文本文件加载现有数据,并用新数据重新写入。就这样我找到了这个问题的正确答案 仔细阅读本文: 假设您必须向现有JSON文件添加用户,则 基本方法是:
- 读取/解析JSON文件以获取内存中的数据结构
- 修改数据结构以添加用户
- 将数据结构解析/写入文件的新副本
- 无法对JSON文件进行就地更新
if(File.Exists(“Books.txt”))
{
字符串jsonToRead=File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory,“Books.txt”);
瓦尔斯=
反序列化对象(jsonToRead);
}
通过这种方式,我从文本文件加载现有数据,并用新数据重新写入。就这样这是您的全部代码吗?在
字符串json=JsonConvert.SerializeObject(VAL)上设置断点代码>第二次写作开始时,VAL的内容是什么?VAL包含第一本书。当添加第二本并重新写入VAL时,第一本被删除,第二本保留。这是您的全部代码吗?在string json=JsonConvert.SerializeObject(VAL)上设置断点代码>第二次写作开始时,VAL的内容是什么?VAL包含第一本书。当第二本书被添加并重新写入VAL时,第1本书被删除,第二本书仍然保留。这是可行的,但当我再次阅读它时,它会给我带来错误,请检查我编辑过的问题。这个答案的问题是:它将键值对附加到数组的末尾,而不是放入引发错误的数组中,“读取JSON内容[]后遇到其他文本。当您想再次读取数据时,这将不起作用,因为它正在创建类似的内容。[{Array1}]”[“-->[Array2]
这是可行的,但当我再次阅读时,它会给我错误,请检查我编辑的问题。这个答案的问题是:它将键值对附加到数组末尾,而不是放在引发错误的数组中,“阅读JSON内容后遇到的其他文本”[。当您想再次读取数据时,这将不起作用,因为它正在创建类似的内容。[{Array1}]“[”-->[Array2]
if (File.Exists("Books.txt"))
{
string jsonToRead = File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Books.txt"));
vals =
JsonConvert.DeserializeObject<List<KeyValuePair<int, string>>>(jsonToRead);
}