C# XmlDocument.Save & Bitmap.Save 真正写入数据到磁盘了吗?
在开发过程中,有如下2个文件操作经常发生。
1. 使用 System.Xml.XmlDocument 保存xml文件,通常我们使用如下方法。
public virtual void Save(string filename);
问题:这种保存xml文件的方法遇到断电情况,有很大可能保存的xml文件会是一个空白。
解决办法1:使用 Save(Stream outStream) & stream.Flush(true) ,参考代码如下:
using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write)) { xmldoc.Save(fs); fs.Flush(true); }
解决方法2:为XmlDocument新增一个扩展方法 Save(string filename, bool flushToDisk)。
/// <summary> /// XmlDocument扩展方法类 /// </summary> static class XmlDocumentExtension { /// <summary> /// 保存到文件 /// </summary> /// <param name="xmlDoc"></param> /// <param name="filename"></param> /// <param name="flushToDisk">设为true,立刻写入磁盘</param> public static void Save(this System.Xml.XmlDocument xmlDoc, string filename, bool flushToDisk) { using (FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write)) { xmlDoc.Save(fs); fs.Flush(flushToDisk); } } }
2. 使用 System.Drawing.Bitmap 保存图片, 通常我们使用如下方法。
public void Save(string filename, ImageFormat format);
问题:这种保存图片的方法遇到断电情况,有很大可能保存的图片会是一个空白。
解决办法:使用 Save(Stream stream, ImageFormat format) & stream.Flush(true) ,参考代码如下:
using (FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write)) { bitmap.Save(fs, format); fs.Flush(true); }