Framework 1.x 下的 DataSet.GetXml()问题,BUG?

本人最近在写一个共享软件"鼎鼎条码批量打印系统2.0",其中要用到把一个DataSet写进二进制文件,下次再从二进制文件返回DataSet.思路是:把DataSet转换为Xml存到文件,下次打开时,把二进制文件转换为Xml,遇到问题和我的解决方法,希望和有缘的读者共飨……

1.DataSet.GetXml()

正常思维是把DataSet的数据取出,string xml = dataSet1.GetXml(),如果你的数据比较多,那么,GetXml()返回的并不是全部的数据,它长度有限制。这点搞得我好痛苦。

2.方法1未果,用DataSet.WriteXml()

如果想以后调用DataSet.ReadXml(),又不想出错或出现乱码,对于包含中文数据的,应注意输入文件的编码最好统一为:UTF8。保存为二进制时建议用
System.Text.Enconding.Default;


MemoryStream ms = new MemoryStream();
XmlWriter xw = new XmlTextWriter(ms, System.Text.Enconding.Default);
dataSet.WriteXml(xw,XmlWriteMode.Auto);
byte[] xmlBuffer = ms.GetBuffer();
//下面就可以写入二进制文件了
...

3.从二进制文件取回Xml注意事项
eg.

MemoryStream ms = new MemoryStream();
byte[]  xmlBuffer = ...//读入二进制
ms.Write(xmlBuffer,0,xmlBuffer.Length); //写入流
dataSet.ReadXml(ms,XmlReadMode.Auto)   //  这里很可能出错

上面原因是,从二进制文件读入时,由于字符串是以'/0'结束的,dataSet.ReadXml()它这个鸟东东并不会自动识别这一点,就会报错说找到不封闭的标签。

怎么办呢?目前我还没有在C#1.x上找到好方法直接在内存中转换,那么,这样试试……

string xml = System.Text.Encoding.Default.GetString(xmlBuffer);   //以default编码取得字符串
xml = xml.TrimEnd('/0');           //这个重要
string tmp = Path.GetTempFile();//取得临时文件名
StreamWriter sw = new StreamWriter(tmp,FileMode.Create,FileAccess.Write,System.Text.Encoding.UTF8);
sw.Write(xml);
sw.Close();
dataSet.ReadXml(tmp,XmlReadMode.Auto);    //成功读入


4.编后

这是由于Xml文件与二进行发生了关系才会这样,如果没涉及到二进制与文本的转换,那么你白看了。哈哈。

另外,上面代码全凭个人记忆打出,具体一些参数或许会有误,但主要是思想是吗??

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值