强制关闭流

4
我偶尔会遇到问题,我的程序中有几个StreamReaderStreamWriter读取并写入信息。它们99%的时间都正常运行,但偶尔会出现一个无法关闭的StreamWriter,即使我已经多次运行过这段代码。
如果我反复调用该函数,则很容易发生这种情况,但我正在尝试找到一种安全的方法来保证流被处理。有人知道怎么做吗?

“Won't close”这个说法比较模糊。您指的是什么?有哪些迹象让您认为它们无法关闭?“spam a function”是什么意思?在短时间内多次调用该函数? - spender
你使用StreamReader/Writer的范围是什么?你能贴一些代码吗? - Brian Driscoll
是的,我表达得非常含糊,我必须道歉。我使用StreamReader开始流读取文件,然后使用XX.dispose()处理它。但是偶尔会遇到无法处理的情况,导致直到重新启动程序都出现“文件正在使用”的问题。我正在尝试解决这个错误,看看是否有修复方法,因为我已经使用了提出的修复措施。 - Charles
3个回答

3

尝试使用using语句 MSDN

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

   //your code

}

这可能很有用:

当表单退出时关闭流读取器和流编写器

此外,您可以使用Try块。

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

是的,我同意这个观点。可能还有更多的IDisposable对象需要处理。对于这些对象也要使用using模式。 - spender

1
如果流的范围是局部的,请始终使用以下结构:
using (var stream = new Stream())
{
    ...do stream work here...
}

如果您将流用作类字段,则应实现IDisposable模式,并在处理类时处理您的流对象:IDisposable


0

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

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

另一种选择是使用 finally 块。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接