XmlSerializer和/或StreamWriter没有释放它们的内容
我在流式传输到文件时遇到问题,我确定有一个简单的解决方案,但我正在努力寻找它!我试图做的事情非常简单,我得到一个类的内容并将它们序列化为XML并将它们流式传输到一个文件中。我使用的代码是:XmlSerializer和/或StreamWriter没有释放它们的内容
ObservableCollection<RackItemViewModel> rackVMs = ProjectTree.GetTreeData();
XmlSerializer serializer = new XmlSerializer(typeof(RackItem));
using (TextWriter tw = new StreamWriter(filename, false))
{
foreach (RackItemViewModel VM in rackVMs)
serializer.Serialize(tw, VM.RackItem);
}
ProjectTree.GetTreeData()只是返回要序列化的数据。如果我运行程序并保存数据,所有数据都按预期工作,则数据将被保存并可通过反序列化读回。我遇到的问题是当我执行多个保存时。如果我将一组数据保存到一个文件,然后将另一组数据保存到另一个文件,则第一个文件是正确的,但第二个文件是第一个文件和第二个文件的拼接!似乎流或XMLSerializer不会在保存之间释放它们的内容。我试过使用writefile而不是Stream,但我仍然遇到同样的问题,我也尝试刷新并关闭流,但这没有任何作用。毋庸置疑,如果我关闭并重新启动应用程序保存它一切正常。 有谁能告诉我我做错了吗?
我想我会整理这个线程,因为我已经设法解决这个问题。事实证明,这与数据的序列化或数据流无关。正在写入的数据缓冲区在写入之间没有完全释放数据。我正在检查视图模型对象,但是正在写入的对象(RackItem)没有跟随套件。愚蠢的错误,我的一部分。感谢您的建议。
在写入新文件之前,请尝试刷新流tw.Flush()
。
可悲的是我试过tw.flush和tw.close哪些没有帮助。上面的代码包含在一个方法(PerformSave)中,该方法通过File,Save菜单调用。用户只需调用一次即可正常工作,然后用不同的数据再次调用它,这就是问题发生的地方。 – Marcus 2012-08-15 10:15:42
正如我在下面发布的 - 是否有其他一些代码?由于据我所知,写入一个文件,然后另一个文件需要使用两个独立的StreamWriters,所以我认为你有更多的代码,我们没有看到... – Charleh 2012-08-15 09:44:54