首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Streamwriter和Streamreader

Streamwriter和Streamreader
EN

Stack Overflow用户
提问于 2013-09-21 13:17:19
回答 3查看 155关注 0票数 1

我有我的uni任务,这只是非常基本的编码,但我必须这样做

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

我有这个问题,因为它将保存,但一旦我关闭程序,并重新打开它,他们走了,任何人的帮助是感激的。

这就是我到目前为止所知道的:

代码语言:javascript
复制
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);
    }
}
EN

回答 3

Stack Overflow用户

发布于 2013-09-21 13:22:50

在关闭StreamWriter之前,您应该调用Flush()方法。Flush()清除当前编写器的所有缓冲区,并将缓冲的数据写入基础流。

票数 0
EN

Stack Overflow用户

发布于 2013-09-21 13:23:35

代码语言:javascript
复制
reader.clos();

你忘了这个

票数 0
EN

Stack Overflow用户

发布于 2013-09-21 13:48:46

这只是一个猜测,但听起来您可能会在启动程序时覆盖该文件。

在您的SaveToFile方法中,开头有以下两行:

代码语言:javascript
复制
StreamWriter writer = new StreamWriter(file);
StreamReader reader = new StreamReader(file);

第一个文件将创建一个名称为file的新文件。如果您没有从文件中读取任何内容,则不需要第二个。

现在,如果在调用SaveToFile方法之前执行的程序中的其他地方有一个类似的代码块,它将覆盖该文件(并且由于您很可能没有在前面的代码部分中编写任何内容,所以只剩下一个空文件)。

为了防止这种情况,我将提供两个建议:

  1. 仅在您要写入文件时创建StreamWriter。在创建StreamWriter时,您将覆盖现有文件。
  2. 如果您不想覆盖文件,可以使用带第二个参数(布尔值)的构造函数的重载来指示是否将新数据附加到文件:

新写入器=新文件( StreamWriter,true);

此外,我建议了解并使用using块,因为这将为您关闭和刷新StreamWriter (及其底层流),即使发生异常且未处理:

代码语言:javascript
复制
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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18929188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档