我有我的uni任务,这只是非常基本的编码,但我必须这样做
用户应能够将记录存储到文件中。在启动时,用户应能够选择记录文件并将其加载到程序中。
我有这个问题,因为它将保存,但一旦我关闭程序,并重新打开它,他们走了,任何人的帮助是感激的。
这就是我到目前为止所知道的:
private void Save_Click(object sender, EventArgs e)
{
SaveToFile(records, file);
}
private void SaveToFile(List<Client> records, string file)
{
//File.WriteAllText(file, String.Empty);
StreamWriter writer = new StreamWriter(file);
StreamReader reader = new StreamReader(file);
try
{
AddMember();
for (int i = 0; i < records.Count; i++)
{
writer.WriteLine(records[i].WriteToFile());
}
writer.Close();
}
catch (IOException z)
{
MessageBox.Show("Error" + z);
}
}发布于 2013-09-21 13:22:50
在关闭StreamWriter之前,您应该调用Flush()方法。Flush()清除当前编写器的所有缓冲区,并将缓冲的数据写入基础流。
发布于 2013-09-21 13:23:35
reader.clos();你忘了这个
发布于 2013-09-21 13:48:46
这只是一个猜测,但听起来您可能会在启动程序时覆盖该文件。
在您的SaveToFile方法中,开头有以下两行:
StreamWriter writer = new StreamWriter(file);
StreamReader reader = new StreamReader(file);第一个文件将创建一个名称为file的新文件。如果您没有从文件中读取任何内容,则不需要第二个。
现在,如果在调用SaveToFile方法之前执行的程序中的其他地方有一个类似的代码块,它将覆盖该文件(并且由于您很可能没有在前面的代码部分中编写任何内容,所以只剩下一个空文件)。
为了防止这种情况,我将提供两个建议:
StreamWriter。在创建StreamWriter时,您将覆盖现有文件。新写入器=新文件( StreamWriter,true);
此外,我建议了解并使用using块,因为这将为您关闭和刷新StreamWriter (及其底层流),即使发生异常且未处理:
private void SaveToFile(List<Client> records, string file)
{
try
{
AddMember();
// If you don't want to append but overwrite, use:
// using (StreamWriter writer = new StreamWriter(file))
using (StreamWriter writer = new StreamWriter(file, append))
{
for (int i = 0; i < records.Count; i++)
{
writer.WriteLine(records[i].WriteToFile());
}
}
}
catch (IOException z)
{
MessageBox.Show("Error" + z);
}
}https://stackoverflow.com/questions/18929188
复制相似问题