【问题标题】:Redirect .NET StreamWriter output to a String variable将 .NET StreamWriter 输出重定向到字符串变量
【发布时间】:2010-09-19 02:35:03
【问题描述】:

我想知道是否可以将 StreamWriter 输出重定向到变量

类似

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

那么 myString 将包含 Foo。 我想这样做的原因是重用一个复杂的功能。我可能应该将它重构为一个字符串返回函数,但知道它仍然是一个很好的技巧

【问题讨论】:

    标签: .net streamwriter


    【解决方案1】:

    您可以使用 StringWriter 将值直接写入字符串构建器对象来完成此操作

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

    【讨论】:

      【解决方案2】:

      StreamWriterStringWriter 都扩展了 TextWriter,也许您可​​以重构使用 StreamWriter 的方法以改用 TextWriter,以便它可以写入流或字符串?

      【讨论】:

      • 唉,就我而言,该方法在第三方库中,我无法更改。
      • 不知道为什么没有代码的答案会被标记为接受的答案,很奇怪
      【解决方案3】:

      您应该能够使用内存流做您需要的事情。

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

      【讨论】:

        【解决方案4】:

        试试这个代码 =]

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

        【讨论】:

        • StringWriter 构造函数不接受 StringBuilder 对象。
        【解决方案5】:

        重构方法以返回字符串,就像你提到的那样。以你尝试的方式破解它,虽然在学术上很有趣,但会使代码变得混乱,并且让任何跟随你的人都很难维护。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-18
          • 1970-01-01
          • 1970-01-01
          • 2014-10-31
          • 2011-05-10
          • 1970-01-01
          相关资源
          最近更新 更多