2008-10-24 6 views
28

Je voudrais savoir s'il est possible de rediriger StreamWriter sortie à une variableRedirect sortie .NET StreamWriter à une variable chaîne

Quelque chose comme

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

alors myString contiendra Foo. La raison pour laquelle je voudrais faire ceci est de réutiliser une fonction complexe. Je devrais probablement Refactor dans une fonction de retour de chaîne, mais il serait encore un beau hack pour savoir

Répondre

22

StreamWriter et StringWriter à la fois étendre TextWriter, vous pourriez peut-être factoriser votre méthode qui utilise StreamWriter pour utiliser TextWriter à la place de sorte qu'il pourrait écrire soit un flux ou une chaîne?

+1

Vous me battez en quelques secondes! –

+0

Hélas dans mon cas, la méthode est dans une bibliothèque tierce, je ne peux pas la changer. –

0

Refactorisez la méthode pour renvoyer la chaîne comme vous l'avez mentionné. Le pirater de la façon dont vous essayez, tout en étant intéressant sur le plan académique, bouleversera le code et le rendra très difficile à maintenir pour quiconque vous suit.

36

Vous pouvez le faire avec un StringWriter écrit directement la valeur à un objet constructeur de chaîne

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

essayer ce code =]

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

Vous devriez être en mesure de faire ce que vous avez besoin à l'aide un flux de mémoire.

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