嗨,为什么using (var sw = new StreamWriter(ms))返回Cannot access a closed Stream exception.Memory Stream在这个代码上面.

using (var ms = new MemoryStream())
{
    using (var sw = new StreamWriter(ms))
    {                 
        sw.WriteLine("data");
        sw.WriteLine("data 2");
        ms.Position = 0;
        using (var sr = new StreamReader(ms))
        {
            Console.WriteLine(sr.ReadToEnd());                        
        }
    } //error here
}

最好的解决方法是什么?

推荐答案

这是因为StreamReader在被处理时会自动关闭底层流.using语句会自动执行此操作.

但是,您正在使用的StreamWriter仍在try 处理流(此外,编写器的using语句现在正在try 处理StreamWriter,然后它将try 关闭流).

解决这个问题的最好方法是:不要使用using,也不要丢弃StreamReaderStreamWriter.请参见this question.

using (var ms = new MemoryStream())
{
    var sw = new StreamWriter(ms);
    var sr = new StreamReader(ms);

    sw.WriteLine("data");
    sw.WriteLine("data 2");
    ms.Position = 0;

    Console.WriteLine(sr.ReadToEnd());                        
}

如果您对swsr被垃圾收集而没有在代码中处理(如建议的那样)感到不安,您可以这样做:

StreamWriter sw = null;
StreamReader sr = null;

try
{
    using (var ms = new MemoryStream())
    {
        sw = new StreamWriter(ms);
        sr = new StreamReader(ms);

        sw.WriteLine("data");
        sw.WriteLine("data 2");
        ms.Position = 0;

        Console.WriteLine(sr.ReadToEnd());                        
    }
}
finally
{
    if (sw != null) sw.Dispose();
    if (sr != null) sr.Dispose();
}

Asp.net相关问答推荐

try 在 .net 中使用 MS Graph 添加新的应用程序角色时出现 ODataError

将 Response.Headers.Add 替换为方法属性decorator

如何在 ASP.NET 中设置自动实现属性的默认值

ASP MVC 授权除少数之外的所有操作

Azure Service Fabric 是否与 Docker 做同样的事情?

在 Asp.net 中通过 Button 的 CommandArgument 传递多个参数

使用 JavaScript 更改 ASP.NET 标签的可见性

新的 ASP.NET MVC 5 应用程序如何知道如何创建数据库以及帐户控制器如何访问数据库?

从 JavaScript 读取 web.config

VirtualPath 在当前应用程序根目录之外

如何设置 CSS 切换器

如何将图像 url 转换为 system.drawing.image

在asp.net mvc 3中实现FilterAttribute,IActionFilter和从ActionFilterAttribute继承有什么区别?

SimpleMembership 与 ASP.NET MVC 4 中的自定义数据库架构

如何在 ASP.Net 网络表单中使用标签?

如何从 ASP.NET 中的数据表/数据视图中 Select 前 n 行

协调 ASP.NET 脚本包和源映射

asp.net core 2.0 - 值不能为空.参数名称:连接字符串

重新生成designer.cs

新的 csproj 文件 struct 可以与 ASP.NET Framework 项目一起使用吗?