【问题标题】:Force close a stream强制关闭流
【发布时间】:2011-06-10 14:44:13
【问题描述】:

我不时遇到问题,我的程序中有几个StreamReaders 和StreamWriters 可以读取和写入信息。它们在大约 99% 的时间里都是正确的,但有时我会在一段我多次运行的代码上得到一个不会关闭的 StreamWriter

如果我向函数发送垃圾邮件,这往往会发生,但我正在尝试找到一种安全的方法来保证蒸汽被处理掉。有人知道怎么做吗?

【问题讨论】:

  • “不会关闭”含糊不清。你这是什么意思?哪些迹象让您相信它们不会关闭?这是什么意思 - “垃圾邮件功能”?短时间内多次调用函数?
  • 您使用流读取器/写入器的范围是什么?可以发一些代码吗?
  • 是的,我很模糊。我必须道歉。我使用 streamreader 启动一个流来读取文件,然后使用 XX.dispose(); 处理它。每隔一段时间,虽然它不会处理,但我最终会得到“文件正在使用”,直到我重新启动我的程序。这是我试图找出是否有修复的错误,因为我已经在使用建议的修复了。

标签: c# io filestream


【解决方案1】:

尝试using 声明MSDN

using (StreamWriter stream = new StreamWriter(Initialization)){

   //your code

}

这很有用:

Closing Stream Read and Stream Writer when the form exits

您也可以使用Try

try
{
    //Declare your streamwriter
    StreamWriter sw = new StreamWriter(Initialization);
}
catch
{
    //Handle the errors
}
finally
{
    sw.Dispose();
}

【讨论】:

  • 是的。我会支持这个。组合中可能有更多的 IDisposables。对这些也使用 using 模式。
【解决方案2】:

如果流的范围是本地的,请始终使用以下构造:

using (var stream = new Stream())
{
    ...do stream work here...
}

另一方面,如果您将流用作类字段,则实现 IDisposable 模式并在处置您的类时处置您的流对象:IDisposable

【讨论】:

    【解决方案3】:

    在 using 语句中包装 StreamWriter 是我通常确保将其处理掉的方式。

    using (var writer = new StreamWriter(@"C:\AFile.txt"))
    {
        //do some stuff with writer
    }
    

    另一种方法是使用finally 块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-03
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多