none
使用XMLTextWriter引起字节丢失 RRS feed

  • 问题

  • MemoryStream ms = new MemoryStream();
    XMLDocument doc = new XMLDocument();
    XMLTextWriter tw = new XMLTextWriter(ms,Encoding.Unicode);
    tw.Formating = Formating.Intended;
    tw.Intend = 4;
    doc.Load("***.xml");
    doc.WriteTo(tw);
    StreamReader sr = new StreamReader(ms);
    string s1 = sr.ReadToEnd();
    
    在上面的代码中,s1的结果和load的xml比较少了最后一些内容,但是我把MemoryStream换成FileStream就不会,用MemoryStream的话会莫名奇妙的少一些字节,我换了不同的Encoding都一样,这是怎么回事?
    2009年11月10日 1:44

答案

  • MemoryStream ms = new MemoryStream();
    
    XMLDocument doc = new XMLDocument();
    
    XMLTextWriter tw = new XMLTextWriter(ms,Encoding.Unicode);<br/>tw.Formating = Formating.Intended;<br/>tw.Intend = 4;
    
    <br/><br/><br/><br/><br/>doc.Load("***.xml");
    
    doc.WriteTo(tw);
    
    StreamReader sr = new StreamReader(ms);
    
    string s1 = sr.ReadToEnd();
    
    
    在上面的代码中,s1的结果和load的xml比较少了最后一些内容,但是我把MemoryStream换成FileStream就不会,用MemoryStream的话会莫名奇妙的少一些字节,我换了不同的Encoding都一样,这是怎么回事?
    tw.Flush();

    写完后,给Flush一下.

    • 已标记为答案 gavingan 2009年11月10日 2:37
    2009年11月10日 1:55
  • XmlWriter,StreamWriter 都有这样的问题,比如 StreamWriter 。

    问题如下:

    未将最后 1 至 4 KB 数据写到文件。

    原因:

    StreamWriter 在内部缓冲数据,这需要调用 Close 或 Flush 方法将缓冲数据写到基础数据存储区。如果没有适当地调用 Close 或 Flush,StreamWriter 实例中缓冲的数据可能不会按预期写出。

    知识改变命运,奋斗成就人生!
    2009年11月10日 2:48
    版主

全部回复

  • MemoryStream ms = new MemoryStream();
    
    XMLDocument doc = new XMLDocument();
    
    XMLTextWriter tw = new XMLTextWriter(ms,Encoding.Unicode);<br/>tw.Formating = Formating.Intended;<br/>tw.Intend = 4;
    
    <br/><br/><br/><br/><br/>doc.Load("***.xml");
    
    doc.WriteTo(tw);
    
    StreamReader sr = new StreamReader(ms);
    
    string s1 = sr.ReadToEnd();
    
    
    在上面的代码中,s1的结果和load的xml比较少了最后一些内容,但是我把MemoryStream换成FileStream就不会,用MemoryStream的话会莫名奇妙的少一些字节,我换了不同的Encoding都一样,这是怎么回事?
    tw.Flush();

    写完后,给Flush一下.

    • 已标记为答案 gavingan 2009年11月10日 2:37
    2009年11月10日 1:55
  • 你好!

    为何不用下面的方式获取 Xml 呢?

    XmlDocument doc = new XmlDocument();
    doc.Load(@"C:\2.xml");
    string outerXml = doc.OuterXml;


    知识改变命运,奋斗成就人生!
    2009年11月10日 2:05
    版主
  • 你好!

    为何不用下面的方式获取 Xml 呢?

    XmlDocument doc = new XmlDocument();
    
    doc.Load(@"C:\2.xml");
    
    string outerXml = doc.OuterXml;
    
    


    知识改变命运,奋斗成就人生!
    OuterXml是排版过后的xml文件吗?
    我的xml文件只在内存中读取 不输出文件,用Galactica所说的flush一下是可以的,但就是不知道为什么用memorystream的时候就要flush,用其他流的时候就不用
    2009年11月10日 2:36
  • XmlWriter,StreamWriter 都有这样的问题,比如 StreamWriter 。

    问题如下:

    未将最后 1 至 4 KB 数据写到文件。

    原因:

    StreamWriter 在内部缓冲数据,这需要调用 Close 或 Flush 方法将缓冲数据写到基础数据存储区。如果没有适当地调用 Close 或 Flush,StreamWriter 实例中缓冲的数据可能不会按预期写出。

    知识改变命运,奋斗成就人生!
    2009年11月10日 2:48
    版主