CSharp-4.0 - Streamwriter和 Streamreader

  显示原文与译文双语对照的内容
0 0

这是我的任务,只是基本的编码,但我必须做

用户应能够将记录存储到文件中。 启动时,用户可以选择记录文件并将这些文件加载到程序中。

当我关闭这个程序并且打开它们的时候,我有问题,但是有一些帮助是感谢的。

这是我迄今:


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

时间: 原作者:

0 0

这只是一个猜测,但是当你启动程序时,你可以能会覆盖该文件。

SaveToFile 方法中,在开始时有以下两行:


StreamWriter writer = new StreamWriter(file);
StreamReader reader = new StreamReader(file);

第一个文件将创建一个名为 file的新文件。 如果你不从文件中进行任何读取,则不需要第二个。

现在,如果程序在调用 SaveToFile 方法之前在它的他地方执行类似的代码块,它将覆盖文件( 因为你最可以能没有在代码的早期部分编写任何内容,所以留下了一个空白文件。) 。

为了防止这里问题,我将提供以下两个建议:

  1. 只有在你要写入文件时才创建 StreamWriter 。 任何时候创建 StreamWriter 时,都将覆盖现有文件。

  2. 当你不想覆盖文件时,可以使用带有第二个参数( 布尔值)的构造函数重载来指示是否将新数据追加到 file: 文件。

    new StreamWriter(file, 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);
 }
}

原作者:
...