saída de redireccionamento .NET StreamWri numa variável de cadeia
-
04-07-2019 - |
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
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.