Подтвердить что ты не робот

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

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

Что-то вроде

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

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

4b9b3361

Ответ 1

StreamWriter и StringWriter расширяются TextWriter, возможно, вы могли бы реорганизовать свой метод, который использует StreamWriter для использования TextWriter вместо этого, чтобы он мог писать либо поток, либо строку?

Ответ 2

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

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

Ответ 3

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

StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
string s = sb.ToString(); <-- Now it will be a string.

Ответ 4

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

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);

Ответ 5

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