Перенаправить вывод .NET StreamWriter в строковую переменную
-
04-07-2019 - |
Вопрос
Я хотел бы знать, возможно ли перенаправить вывод StreamWriter в переменную
Что-то вроде
String^ myString;
StreamWriter sw = gcnew StreamWriter([somehow specify myString])
sw->WriteLine("Foo");
тогда myString будет содержать Foo. Причина, по которой я хотел бы сделать это, состоит в том, чтобы повторно использовать сложную функцию. Я, вероятно, должен преобразовать его в функцию, возвращающую String, но все равно было бы неплохо знать,
Решение
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);
Рефакторинг метода для возврата строки, как вы упоминали, вы могли бы. Взломать его так, как вы пытаетесь, хотя и академически интересно, запутывает код и делает его очень трудным для тех, кто следует за вами.