38

StreamWriter の出力を変数にリダイレクトできるかどうか知りたい

何かのようなもの

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

myString には Foo が含まれます。これを行いたい理由は、複雑な関数を再利用するためです。おそらくそれを文字列を返す関数にリファクタリングする必要がありますが、それでも知っておくといいハックになります

4

5 に答える 5

48

これは、値を文字列ビルダー オブジェクトに直接書き込む StringWriter を使用して行うことができます。

StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
// now, the StringWriter instance 'sw' will write to 'sb'
于 2008-10-24T20:42:40.950 に答える
34

StreamWriterStringWriterは両方とも TextWriter を拡張します。おそらく、StreamWriter を使用するメソッドをリファクタリングして、代わりに TextWriter を使用し、ストリームまたは文字列に書き込むことができますか?

于 2008-10-24T20:40:17.570 に答える
12

Memory Stream を使用して、必要なことを実行できるはずです。

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);
于 2015-04-16T15:38:58.220 に答える
8

このコードを試してください =]

StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
string s = sb.ToString(); <-- Now it will be a string.
于 2013-05-15T03:37:56.880 に答える
0

あなたができると述べたように、文字列を返すようにメソッドをリファクタリングします。あなたが試みている方法でハッキングすると、学術的には興味深いものですが、コードが混乱し、あなたに従う人にとっては保守が非常に困難になります。

于 2008-10-24T20:41:49.940 に答える