2008-10-24 63 views
28

一個字符串,我想知道,如果有可能的StreamWriter輸出重定向到一個變量重定向.NET的StreamWriter輸出變量

喜歡的東西

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

的myString然後將包含富。 我想這樣做的原因是重用一個複雜的函數。我也許應該重構它爲一個字符串返回功能,但它仍然是一個不錯的黑客知道

回答

22

StreamWriterStringWriter都擴展的TextWriter,也許你可以重構使用的StreamWriter使用的TextWriter代替它會寫信給你的方法要麼一個流還是一個字符串?

+1

你打我幾秒! – 2008-10-24 20:46:49

0

重構返回字符串的方法,正如你所說的那樣。按照您嘗試的方式對其進行黑客入侵,而學術上有趣的是,將會篡改代碼,並且很難爲跟隨您的任何人維護代碼。

36

您可以用StringWriter的直接寫入值的字符串生成器對象

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

試試這個代碼做=]

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

你應該能夠做你需要使用的是什麼一個內存流。

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