假设一个写入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();
本文介绍了一种在多次写入XML文件过程中遇到的根级别数据无效的问题及其解决方案。当使用DataSet对象向XML文件中写入内容时,若不适当处理,可能会导致文件中遗留不必要的数据。文章提供了一个简单有效的方法来清除文件中的残留内容。

被折叠的 条评论
为什么被折叠?



