Перенаправить вывод .NET StreamWriter в строковую переменную - PullRequest
31 голосов
/ 25 октября 2008

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

Что-то вроде

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

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

Ответы [ 5 ]

38 голосов
/ 25 октября 2008

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

StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
// now, the StringWriter instance 'sw' will write to 'sb'
26 голосов
/ 25 октября 2008

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

6 голосов
/ 16 апреля 2015

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

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);
6 голосов
/ 15 мая 2013

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

StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
string s = sb.ToString(); <-- Now it will be a string.
0 голосов
/ 25 октября 2008

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

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