Ответ 1
StreamWriter и StringWriter расширяются TextWriter, возможно, вы могли бы реорганизовать свой метод, который использует StreamWriter для использования TextWriter вместо этого, чтобы он мог писать либо поток, либо строку?
Я хотел бы знать, можно ли перенаправить вывод StreamWriter в переменную
Что-то вроде
String^ myString;
StreamWriter sw = gcnew StreamWriter([somehow specify myString])
sw->WriteLine("Foo");
то myString будет содержать Foo. Причина, по которой я хотел бы сделать это, - повторное использование сложной функции. Я должен, вероятно, преобразовать его в функцию возврата строки, но все равно было бы неплохо взломать
StreamWriter и StringWriter расширяются TextWriter, возможно, вы могли бы реорганизовать свой метод, который использует StreamWriter для использования TextWriter вместо этого, чтобы он мог писать либо поток, либо строку?
Вы можете сделать это с помощью StringWriter, записывающего значение непосредственно в объект построителя строк
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
// now, the StringWriter instance 'sw' will write to 'sb'
Попробуйте этот код =]
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
string s = sb.ToString(); <-- Now it will be a string.
Вы должны иметь возможность делать то, что вам нужно, используя поток памяти.
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);
Восстановите метод, чтобы вернуть строку, как вы уже говорили. Взломать его так, как вы пытаетесь, в то время как академически интересно, будет мутить код и сделать его очень трудным для тех, кто следует за вами.