报告有时不写入文件

时间:2013-03-01 22:16:53

标签: c# file text

我有一个程序,我可以在程序中添加汽车启动销售列表,并指定它们是否用于慈善机构等。还有一个按钮,用于生成汽车启动销售列表,用于慈善机构和那些那些不是不同的文本文件。当我将慈善机构启动销售添加到应用程序并生成列表时,它会正确写入文件。但是,当我再次加载应用程序并尝试生成文件时,它会生成一个空白列表。 (我具有在退出时保存应用程序数据并在启动时重新加载数据的功能)。

我不确定为什么会发生这种情况?

以下是用于生成文件列表的按钮背后的代码:

        List<CarBootSale> carbootsales = carBootSaleList.ReturnList();
        carbootsales.Sort(delegate(CarBootSale bs1, CarBootSale bs2)
        {
            return Comparer<string>.Default.Compare(bs1.ID, bs2.ID);
        });
        textReportGenerator.GenerateCharityReport(carbootsales, AppData.CHARITY);
        MessageBox.Show("All the Charity Car Boot Sales have been written to the report file: " + AppData.CHARITY);

以下是TextReportGenerator类中生成报告的代码:

        FileStream outFile;
        StreamWriter writer;

        //create the file and write to it
        outFile = new FileStream(filePath, FileMode.Create, FileAccess.Write);
        writer = new StreamWriter(outFile);

        //For each object in the list, add it to the file
        foreach (CarBootSale obj in CharityList)
        {
            if (obj.Charity == "true")
            {
                writer.WriteLine(obj.Display());
            }
        }
        //close the file which has been opened
        writer.Close();
        outFile.Close();

1 个答案:

答案 0 :(得分:1)

你的代码看起来很好(注意:见下文),所以没有让整个代码在本地运行我不能给出具体的建议,除了使用using

考虑使用这样的代码:

    using(FileStream outFile = new FileStream(filePath, FileMode.Create, FileAccess.Write))
    using(StreamWriter writer = new StreamWriter(outFile)) {

        //For each object in the list, add it to the file
        foreach (CarBootSale obj in CharityList) {
            if (obj.Charity == "true") {
                writer.WriteLine(obj.Display());
            }
        }

    }

我的猜测是你的Display方法中存在一个未被处理的异常,因此永远不会调用.Close,因此数据永远不会从缓冲区中刷出到磁盘。使用using块可以保证无论发生什么(异常或过早return),您的流的缓冲区都将写入磁盘而不会丢失任何数据。

一件小事:为什么.Charity是一个字符串?为什么不是booleanenum属性?