Pregunta

Me gustaría saber si es posible redirigir la salida de StreamWriter a una variable

Algo como

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

entonces myString contendrá Foo. La razón por la que me gustaría hacer esto es reutilizar una función compleja. Probablemente debería refactorizarlo en una función de retorno de String, pero aún así sería un buen truco saber

¿Fue útil?

Solución

StreamWriter y StringWriter extienden TextWriter, quizás podría refactorizar su método que usa StreamWriter para usar TextWriter en lugar de eso, ¿podría escribir en una secuencia o en una cadena?

Otros consejos

Puede hacer esto con un StringWriter escribiendo el valor directamente en un objeto generador de cadenas

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

Prueba este código =]

StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
string s = sb.ToString(); <-- Now it will be a string.

Debes poder hacer lo que necesites usando un flujo de memoria.

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

Refactoriza el método para devolver la cadena como mencionaste que podías. Hackearlo de la forma en que lo intentas, si bien es académicamente interesante, enturbiará el código y será muy difícil de mantener para cualquiera que te siga.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top