Замена потока на строку в программе на C # - PullRequest
2 голосов
/ 06 июля 2010

В настоящее время у меня есть программа, которая читает файл и использует XMLTextWriter для записи файла XML на диск.Вскоре после этого я читаю файл и анализирую его.

Я пытаюсь соединить эти две программы.Я хочу избавиться от записи в файл шаг.XMLTextWriter нужен путь к файлу или поток при его создании.Есть ли способ создать поток, который будет создавать строку с выводом вместо записи в файл?

Спасибо

Ответы [ 3 ]

5 голосов
/ 06 июля 2010

Самый простой способ - это использовать 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());

(конечно же, настроить для соответствующей кодировки.)

В качестве альтернативы, если вы можете предоставить свой код сTextWriter вместо Stream, вы можете использовать StringWriter.Следует отметить, что по умолчанию StringWriter будет объявлять о своем желании использовать UTF-16.Вы можете переопределить это поведение с помощью подкласса, например так:

public sealed class Utf8StringWriter : StringWriter
{
    public override Encoding Encoding { get { return Encoding.UTF8; } }
}

(Очевидно, вы можете сделать это более гибким способом, тоже ...)

3 голосов
/ 06 июля 2010

XmlTextWriter также имеет конструктор, который может принимать TextWriter, поэтому вы можете просто использовать StringWriter:

string xml;
using (StringWriter str = new StringWriter()) {
  using (XmlTextWriter writer = new XmlTextWriter(str)) {
    // write the XML
  }
  xml = str.ToString();
}
1 голос
/ 06 июля 2010

Вы можете использовать MemoryStream .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...