2008-10-24 20 views
28

me gustaría saber si es posible redirigir la salida StreamWriter para una variablesalida de redirección .NET StreamWriter a una variable de cadena

Algo así como

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

continuación miCadena contendrá Foo. La razón por la que me gustaría hacer esto es reutilizar una función compleja. Probablemente debería refactorearlo en una función que devuelve cadena pero todavía sería un buen truco para saber

Respuesta

22

StreamWriter y StringWriter tanto extender TextWriter, tal vez usted podría refactorizar el método que utiliza StreamWriter para utilizar TextWriter lugar por lo que podría escribir en cualquiera una secuencia o una cadena?

+1

¡Me ganas por tan solo unos segundos! –

+0

Ay, en mi caso, el método está en una biblioteca de terceros, no puedo cambiarlo. –

0

Refactorice el método para devolver la cadena como mencionó que podría. Si lo piratea de la manera en que lo intenta, aunque sea académicamente interesante, enturbierá el código y lo hará muy difícil de mantener para cualquiera que lo siga.

36

Usted puede hacer esto con un StringWriter escribiendo el valor directamente a un objeto constructor de cadena

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

probar este código =]

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

usted debería ser capaz de hacer lo que necesita el uso de 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); 
Cuestiones relacionadas