none
MemoryStream 不用手动关闭流吗? RRS feed

答案

  • Writer是要写到Stream里边去的,既然Stream关闭了,自然Writer无法访问了。建议你把finally中两句代码互换一下位置。

     finally
                {
                    if (writer != null)
                                     writer.Close();
                     if (stream != null)
                        stream.Close();
                }


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已标记为答案 bianchunlei 2012年4月25日 11:14
    2012年4月25日 8:47
    版主

全部回复

  • MemoryStream 不用手动关闭流吗?
    最好手动关闭,当然MemoryStream实现了IDisposible,可以放到using块中,一旦执行完毕自动退出using块之后指定Dispose方法销毁的。

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已建议为答案 亂馬客 2012年4月24日 10:18
    2012年4月24日 9:04
    版主
  • 我有个方法a,用stream.ToArray()把它转化成byte数组给一个局部变量x,再把这个x返回。

    但我只要在这个方法a中用stream.close()关闭流,在调用的方法b中写成:

    byte[] b=a();就会报错:无法访问已关闭的流。

    但是我是把stream.close()放在finally块处理的,而byte数组x是放在try块就返回了,而且流已经转化成byte[]保存在局部变量中了,这跟finally中的关闭流应该没关系啊

    而我在方法a中不关闭流的话,就不会报错~

    2012年4月24日 10:34
  • 不妨请给出你的代码,谢谢……

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月25日 1:05
    版主
  •           public byte[] transferData(string s)

    {

     MemoryStream stream = null;
                XmlWriter writer = null;
                try
                {
                    stream = new MemoryStream();
                    XmlWriterSettings setting = new XmlWriterSettings();
                    setting.Indent = true;
                    setting.Encoding = Encoding.UTF8;
                    writer = XmlWriter.Create(stream, setting);

                    .........写数据

                    byte[] mybyte = stream.ToArray();

                    return mybyte;
                }
                catch (Exception ex)
                {
                              return null;  

               }
                finally
                {
                    if (stream != null)
                        stream.Close();
                    if (writer != null)
                        writer.Close();//!!!!!!!!!!!!!!!!!!!!!!!!!!
                }

    }

    byte[] data_Send = transferData(s);//这句会出错:无法访问已关闭的流

    2012年4月25日 8:39
  • Writer是要写到Stream里边去的,既然Stream关闭了,自然Writer无法访问了。建议你把finally中两句代码互换一下位置。

     finally
                {
                    if (writer != null)
                                     writer.Close();
                     if (stream != null)
                        stream.Close();
                }


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已标记为答案 bianchunlei 2012年4月25日 11:14
    2012年4月25日 8:47
    版主