首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.ObjectDisposedException。处理流写入器的正确方法是什么?

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

Stack Overflow用户
提问于 2013-10-01 00:01:21
回答 3查看 3K关注 0票数 2

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

代码语言:javascript
复制
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;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-01 00:04:22

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

代码语言:javascript
复制
using (TextWriter writer = new StreamWriter(output, Encoding.UTF8, 1024, true))
{

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

票数 3
EN

Stack Overflow用户

发布于 2013-10-01 00:07:26

除了要处理的流之外,StreamWriter没有非托管资源。调用TextWriter.Dispose()将导致关闭基础流。若要保持流打开,请删除using块:

代码语言:javascript
复制
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及以上,里德的答案看起来更优雅。

票数 2
EN

Stack Overflow用户

发布于 2018-07-03 13:26:01

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

代码语言:javascript
复制
using (StreamWriter writer = new StreamWriter(@"C:\Users\\Documents\Dev\error.txt", true))
{
    writer.WriteLine("cod: " + codERP );
}

自动关闭文件。

在你的文件写完(一次)之后,试着获取你需要的所有信息(在里面)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19105829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档