Pergunta

Eu gostaria de saber se é possível redirecionar a saída StreamWriter para uma variável

Algo como

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

então myString conterá Foo. A razão que eu gostaria de fazer isso é reutilizar uma função complexa. Eu provavelmente deveria refatorar-lo em uma função retornando cordas, mas ainda assim seria um bom truque para saber

Foi útil?

Solução

StreamWriter e StringWriter ambos estendendo TextWriter, talvez você poderia refatorar seu método que usa StreamWriter para usar TextWriter em vez para que ele pudesse escrever a qualquer um córrego ou uma string?

Outras dicas

Você pode fazer isso com um StringWriter escrevendo o valor diretamente para um objeto string construtor

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

Experimente esta code =]

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

Você deve ser capaz de fazer o que você precisa usar um fluxo de memória.

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

Refactor o método a seqüência de retorno como você mencionou que podia. Hacking-lo da maneira que você está tentando, ao mesmo tempo academicamente interessante, vai turvar o código e torná-lo muito difícil de manter para qualquer um que te segue.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top