2011-06-10 102 views
4

我有一个问题不时,我有几个StreamReader s和StreamWriter s在我的程序中读取信息并写入它。他们大概99%的时间都是正确的,但是偶尔我会碰到一段不会关闭的StreamWriter,我已经多次运行一段代码。强制关闭流

这种情况往往会发生,如果我发送垃圾邮件的功能,但我试图找到一种安全的方式来保证蒸汽处置。任何人都知道吗?

+0

“不会关闭”含糊不清。这是什么意思?什么迹象使你相信他们不会关门?这是什么意思 - “垃圾邮件功能”?在短时间内多次调用该功能? – spender 2011-06-10 14:47:25

+0

您使用流式读取器/写入器的范围是什么?你可以发布一些代码吗? – 2011-06-10 14:47:28

+0

是的,我很含糊。我必须认同。我使用streamreader来开始一个流来读取文件,然后使用XX.dispose();处置它。每过一段时间,虽然它不会处理,并且我将以“文件正在使用”结束,直到我重新启动我的程序。这是我试图找出是否有修复的错误,因为我已经在使用所提出的修复程序。 – Charles 2011-06-10 17:56:57

回答

3

尝试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(); 
} 
+0

是的。我会继续这个。混合中可能会有更多的IDisposables。也使用这些使用模式。 – spender 2011-06-10 14:49:03

0

的包装纸中的StreamWriter使用声明是我通常如何确保它被处置。

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

另一种方法是使用finally块。

1

如果流的范围是局部的,总是使用下面的结构:如果在另一方面,你使用的是流作为类字段然后实现IDisposable模式和处置您的流物体配置时

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

您的班级:IDisposable