使用文件流写Xml文件时得到的一个小经验 .

假设一个写入XML文件的上下文情景


//打算将这个DataSet对象的内容写入xml文件中
DataSet dataSet = new DataSet("Example");
//首先以文件流的形式打开xml文件
FileStream fs = File.Open(fileName, FileMode.OpenOrCreate);
//而后将dataSet的内容写入该文件流
dataSet.WriteXML(fs, XmlWriteMode.WriteSchema);
//写入缓存,关闭文件
fs.Close();

 

 

如上代码在执行多次后很可能会出现异常,异常信息为“根级别上的数据无效。”

这是由于多次执行过程中,若上次写入的字符串长度为100,那么本次打开的文件流包含100个字符,而这次写入的字符串长度为90,那么WriteXML方法会用这90个字符覆盖文件流中的前90个字符,而倒数10个字符却未被覆盖,依然保留着,成为一个“小尾巴”。

 


如第一次写入的内容是:
<Example>
<Say>This is not a Example</Say>
</Example>
想在第二次写入的内容是:
<Example>
<Say>This is a Example</Say>
</Example>
那么第二次写入后,内容可能会变成
<Example>
<Say>This is a Example</Say>
</Example>ple>
注意最后一行留下的“尾巴”——ple>

 

 

为了解决这个问题,在每次写入之前用SetLength()方法清空打开的文件流即可,如下所示:


//打算将这个DataSet对象的内容写入xml文件中
DataSet dataSet = new DataSet("Example");
//首先以文件流的形式打开xml文件
FileStream fs = File.Open(fileName, FileMode.OpenOrCreate);

 

//将文件流长度设为0,即可清空其中的内容
fs.SetLength(0);

 

//而后将dataSet的内容写入该文件流
dataSet.WriteXML(fs, XmlWriteMode.WriteSchema);
//写入缓存,关闭文件
fs.Close();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值