内存流为空

| 我需要从不同的来源(函数)生成一个巨大的xml文件。我决定使用“ 0”,因为它比“ 1”使用更少的内存。 首先,以基础underlying3ѭ发起initiate2ѭ
MemoryStream ms = new MemoryStream();
XmlTextWriter xmlWriter = new XmlTextWriter(ms, new UTF8Encoding(false, false));
xmlWriter.Formatting = Formatting.Indented;
然后,我将
XmlWriter
(注意xml writer保持打开状态直到最后)传递给一个函数,以生成XML文件的开头:
xmlWriter.WriteStartDocument();

xmlWriter.WriteStartElement();

// xmlWriter.WriteEndElement(); // Do not write the end of root element in first function, to add more xml elements in following functions

xmlWriter.WriteEndDocument();
xmlWriter.Flush();
但是我发现基础内存流为空(通过将字节数组转换为字符串和输出字符串)。有什么想法吗? 另外,我对如何从不同来源(函数)生成巨大的xml文件有一个普遍的疑问。我现在要做的是保持每个函数的ѭ2打开状态(我假设底层内存流也应打开)并写入。在第一个函数中,我不写根元素的结尾。在最后一个函数之后,我通过以下方式手动添加根元素的结尾:
string endRoot = \"</Root>\";
byte[] byteEndRoot = Encoding.ASCII.GetBytes(endRoot);
ms.Write(byteEndRoot, 0, byteEndRoot.Length); 
不知道这是否行得通。 非常感谢!     
已邀请:
从技术上讲,每个问题您只应该问一个问题,所以我只想回答第一个问题,因为这对我来说只是对SO的快速访问。 在尝试从我认为的Stream读取之前,需要调用Flush。 编辑 请从下面的评论中冒充我的第二个直觉,以证明这里的答案是正确的。 除了对
Flush
的调用外,如果使用ѭ10方法及其弟兄从Stream读取数据,则必须首先将Stream中的位置重置为起点。否则,将不会读取任何字节。
ms.Position = 0; /*reset Position to start*/
StreamReader reader = new StreamReader(ms); 
string text = reader.ReadToEnd(); 
Console.WriteLine(text); 
    
也许您需要在检查内存条之前在xml流上调用Flush()。     
在检查内存流之前,请确保在XmlTextWriter上调用Flush。     

要回复问题请先登录注册