我想知道是否可以将 StreamWriter 输出重定向到变量
就像是
String^ myString;
StreamWriter sw = gcnew StreamWriter([somehow specify myString])
sw->WriteLine("Foo");
那么 myString 将包含 Foo。我想这样做的原因是重用一个复杂的函数。我可能应该将它重构为一个字符串返回函数,但它仍然是一个很好的 hack 知道
我想知道是否可以将 StreamWriter 输出重定向到变量
就像是
String^ myString;
StreamWriter sw = gcnew StreamWriter([somehow specify myString])
sw->WriteLine("Foo");
那么 myString 将包含 Foo。我想这样做的原因是重用一个复杂的函数。我可能应该将它重构为一个字符串返回函数,但它仍然是一个很好的 hack 知道
您可以使用 StringWriter 将值直接写入字符串构建器对象来执行此操作
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
// now, the StringWriter instance 'sw' will write to 'sb'
StreamWriter和StringWriter都扩展了 TextWriter,也许您可以重构使用 StreamWriter 的方法以改用 TextWriter,以便它可以写入流或字符串?
您应该能够使用 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);
试试这个代码=]
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
string s = sb.ToString(); <-- Now it will be a string.
正如您提到的那样,重构方法以返回字符串。以你尝试的方式来破解它,虽然在学术上很有趣,但会使代码变得混乱,并且让任何跟随你的人都很难维护它。