Question

J'aimerais savoir s'il est possible de rediriger la sortie de StreamWriter vers une variable

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 cela est de réutiliser une fonction complexe. Je devrais probablement le refactoriser dans une fonction de retour de chaîne, mais ce serait tout de même un bon bidouillage à connaître

Était-ce utile?

La solution

StreamWriter et StringWriter étendent tous les deux TextWriter, vous pourriez peut-être refactoriser votre méthode qui utilise StreamWriter pour utiliser TextWriter à la place, il pourrait écrire dans un flux ou une chaîne?

Autres conseils

Vous pouvez le faire avec un StringWriter écrivant la valeur directement dans un objet constructeur de chaînes

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

Essayez ce code =]

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

Vous devriez être capable de faire ce dont vous avez besoin en utilisant 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);

Refactorisez la méthode pour renvoyer une chaîne comme vous l’avez indiqué. Le piratage comme vous le tentez, même s’il est intéressant d’un point de vue académique, va brouiller le code et le rendre très difficile à maintenir pour tous ceux qui vous suivent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top