2008-10-24 4 views
28

Ich mag gerne wissen, ob es möglich ist Stream Ausgabe in eine VariableRedirect .NET Stream Ausgabe in eine String-Variable

Etwas zu umleiten wie

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

dann myString Foo enthalten. Der Grund, warum ich dies tun möchte, besteht darin, eine komplexe Funktion wiederzuverwenden. Wahrscheinlich sollte ich es in eine String Rückkehr Funktion Refactoring, aber es wäre immer noch ein nettes Hack wissen

Antwort

22

StreamWriter und StringWriter erstrecken sich beide Textwriter, vielleicht könnten Sie Ihre Methode Refactoring, die Stream verwendet Textwriter anstatt zu verwenden, um es schreiben könnte entweder ein Stream oder eine Zeichenfolge?

+1

Sie schlagen mich nur Sekunden! –

+0

Leider in meinem Fall ist die Methode in einer Third-Party-Bibliothek, ich kann es nicht ändern. –

0

Refaktorieren Sie die Methode zum Zurückgeben einer Zeichenfolge, wie Sie es bereits erwähnt haben. Es zu hacken, so wie Sie es versuchen, während es akademisch interessant ist, wird den Code trüben und es für jeden, der Ihnen folgt, sehr schwer halten.

36

Sie können mit einem String tun dies den Wert direkt in ein String-Builder-Objekt zu schreiben

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

diesen Code ausprobieren =]

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

sollten Sie in der Lage sein zu tun, was Sie brauchen, mit ein Speicherstrom

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