System.ObjectDisposedException. 处理流编写器的正确方法是什么?



这是我的代码,不言自明。using块终止后 - output变量被释放。为什么?我想从函数中返回它,释放 StreamWriter 但返回我的对象的正确方法是什么?

public static Stream Write(Interchange interchange)
{
    var output = new MemoryStream();
    using (TextWriter writer = new StreamWriter(output))
    {
        foreach (var rawSegment in GetRawSegments(interchange))
        {
            writer.Write(rawSegment.ToString(interchange.ElementDelimeter, interchange.SegmentTerminator));
        }
        writer.Flush();
     }
     return output;
}

有一个 StreamWriter 的构造函数,它允许您通过 bool 指定不关闭底层Stream

using (TextWriter writer = new StreamWriter(output, Encoding.UTF8, 1024, true))
{

请注意,您可能还希望在返回之前将MemoryStream的位置重置为零,具体取决于它的使用方式。

StreamWriter 除了要处理的流之外,没有非托管资源。调用 TextWriter.Dispose() 会导致关闭底层流。要使流保持打开状态,请删除using块:

var output = new MemoryStream();
TextWriter writer = new StreamWriter(output);
foreach (var rawSegment in GetRawSegments(interchange))
{
   writer.Write(rawSegment.ToString(interchange.ElementDelimeter, interchange.SegmentTerminator));
}
writer.Flush();
return output;

PS:对于.NET 4.5及更高版本,Reed的答案看起来更优雅。

在循环中,在必要时创建新实例...

using (StreamWriter writer = new StreamWriter(@"C:Users\DocumentsDeverror.txt", true))
{
    writer.WriteLine("cod: " + codERP );
}

蒸汽写入器自动关闭文件。

尝试在写入文件后获取您需要的所有信息(内部)(一次)

相关内容

  • 没有找到相关文章

最新更新