gpt4 book ai didi

c# - 内存流为空

转载 作者:行者123 更新时间:2023-12-04 22:50:51 26 4
gpt4 key购买 nike

我需要从不同的来源(函数)生成一个巨大的 xml 文件。我决定使用 XmlTextWriter因为它使用的内存少于 XmlDocument .

首先,发起 XmlWriter与底层 MemoryStream

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 文件的一般问题。我现在要做的是保留 XmlWriter对每个函数打开(我假设底层内存流也应该打开)并写入。在第一个函数中,我没有写根元素的结尾。在最后一个函数之后,我通过以下方式手动添加根元素的结尾:
string endRoot = "</Root>";
byte[] byteEndRoot = Encoding.ASCII.GetBytes(endRoot);
ms.Write(byteEndRoot, 0, byteEndRoot.Length);

不确定这是否有效。

非常感谢!

最佳答案

从技术上讲,每个问题你应该只问一个问题,所以我只回答第一个问题,因为这只是我目前对 SO 的快速访问。

您需要调用Flush在尝试从我认为的 Stream 中读取之前。

编辑
只是从下面的评论中冒出我的第二个预感来证明这里接受的答案是正确的。

除了调用 Flush ,如果使用 Read 从 Stream 读取方法及其兄弟,则必须首先将流中的位置重置回开始。否则不会读取任何字节。

ms.Position = 0; /*reset Position to start*/
StreamReader reader = new StreamReader(ms);
string text = reader.ReadToEnd();
Console.WriteLine(text);

关于c# - 内存流为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6130469/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com