Перенаправить вывод .NET StreamWriter в строковую переменную

Я хотел бы знать, можно ли перенаправить вывод StreamWriter в переменную

Что-то типа

String^ myString;
StreamWriter sw = gcnew StreamWriter([somehow specify myString])
sw->WriteLine("Foo");

тогда myString будет содержать Foo. Причина, по которой я хотел бы сделать это, заключается в повторном использовании сложной функции. Я, вероятно, должен преобразовать его в функцию, возвращающую строку, но все равно было бы неплохо знать


person Eric    schedule 24.10.2008    source источник


Ответы (5)


StreamWriter и StringWriter расширяют TextWriter. может писать либо в поток, либо в строку?

person Matt Ellis    schedule 24.10.2008
comment
Увы, в моем случае метод находится в сторонней библиотеке, изменить его я не могу. - person Colonel Panic; 20.05.2013

Вы можете сделать это с помощью StringWriter, записывающего значение непосредственно в объект построителя строк.

StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
// now, the StringWriter instance 'sw' will write to 'sb'
person Ely    schedule 24.10.2008

Вы должны быть в состоянии делать то, что вам нужно, используя поток памяти.

MemoryStream mem = new MemoryStream(); 
StreamWriter sw = new StreamWriter(mem);
sw.WriteLine("Foo"); 
// then later you should be able to get your string.
// this is in c# but I am certain you can do something of the sort in C++
String result = System.Text.Encoding.UTF8.GetString(mem.ToArray(), 0, (int) mem.Length);
person Pascal Ganaye    schedule 16.04.2015

Попробуйте этот код =]

StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
string s = sb.ToString(); <-- Now it will be a string.
person Community    schedule 15.05.2013
comment
Конструктор StringWriter не принимает объект StringBuilder. - person Chris Walsh; 08.04.2019

Рефакторинг метода для возврата строки, как вы упомянули, что можете. Взлом так, как вы пытаетесь, хотя и интересен с академической точки зрения, запутает код и затруднит его поддержку для всех, кто последует за вами.

person Rob Prouse    schedule 24.10.2008