我有一个程序,我可以在程序中添加汽车启动销售列表,并指定它们是否用于慈善机构等。还有一个按钮,用于生成汽车启动销售列表,用于慈善机构和那些那些不是不同的文本文件。当我将慈善机构启动销售添加到应用程序并生成列表时,它会正确写入文件。但是,当我再次加载应用程序并尝试生成文件时,它会生成一个空白列表。 (我具有在退出时保存应用程序数据并在启动时重新加载数据的功能)。
我不确定为什么会发生这种情况?
以下是用于生成文件列表的按钮背后的代码:
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();
答案 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
是一个字符串?为什么不是boolean
或enum
属性?