在C#程序中用字符串替换流

jam*_*tha 2 c# stream

目前,我有一个程序读取文件并使用XMLTextWriter将XML文件写入磁盘.不久之后,我读了文件并解析它.

我想把这两个程序放在一起.我想摆脱写入文件步骤.XMLTextWriter在构造时需要文件路径或Stream.有没有办法使Stream能够使用输出创建一个字符串而不是将其写入文件?

谢谢

Jon*_*eet 5

最简单的方法是使用MemoryStream:

// To give code something to read
Stream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(text));
CallRealCode(memoryStream);


// To give code something to write:
Stream memoryStream = new MemoryStream();
CallRealCode(memoryStream);
string text = Encoding.UTF8.GetString(memoryStream.ToArray());
Run Code Online (Sandbox Code Playgroud)

(当然,调整为适当的编码.)

或者,如果您可以使用a TextWriter而不是a 来提供代码Stream,则可以使用a StringWriter.需要注意的一点是,默认情况下,StringWriter会将自己宣传为想要使用UTF-16.您可以使用子类覆盖此行为,如下所示:

public sealed class Utf8StringWriter : StringWriter
{
    public override Encoding Encoding { get { return Encoding.UTF8; } }
}
Run Code Online (Sandbox Code Playgroud)

(显然你也可以用更灵活的方式做到这一点......)