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

StackOverflow https://stackoverflow.com/questions/235156

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top