Пренасочете изхода на .NET StreamWriter към променлива String

Бих искал да знам дали е възможно да пренасоча изхода на StreamWriter към променлива

Нещо като

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

тогава myString ще съдържа Foo. Причината, поради която бих искал да направя това, е да използвам повторно сложна функция. Вероятно трябва да го преработя във функция за връщане на низ, но все пак би било хубаво да го знам


person Eric    schedule 24.10.2008    source източник


Отговори (5)


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

person Matt Ellis    schedule 24.10.2008
comment
Уви, в моя случай методът е в библиотека на трета страна, не мога да го променя. - person Colonel Panic; 20.05.2013

Можете да направите това с StringWriter, записващ стойността директно в обект за създаване на низове

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

Трябва да можете да правите това, от което се нуждаете, като използвате поток от памет.

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);
person Pascal Ganaye    schedule 16.04.2015

Изпробвайте този код =]

StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
string s = sb.ToString(); <-- Now it will be a string.
person Community    schedule 15.05.2013
comment
Конструкторът StringWriter не приема StringBuilder обект. - person Chris Walsh; 08.04.2019

Преработете метода, за да върнете низ, както споменахте, че можете. Хакването му по начина, по който се опитвате, макар и академично интересно, ще замъгли кода и ще го направи много труден за поддръжка за всеки, който ви следва.

person Rob Prouse    schedule 24.10.2008