2009-02-12 67 views
2

我正在使用RTF文件作为ASP.NET Web应用程序的模板。我的VB.NET代码使用StreamReader读取文件,替换一些字符串,并使用数据库中的数据创建一个新的Word文档。我的代码关闭并处理StreamReader。但是,当我尝试将修改后的RTF文件上载到Web服务器时,出现错误“无法打开文件进行写入”。很显然,在ASP.NET页面运行之后,文件仍然保持打开状态。.NET StreamReader不会关闭

如何强制StreamReader关闭?即使编辑web.config文件以强制Web应用程序重新启动也不足以终止该文件的锁定。

+0

如果你关闭和处理看起来很奇怪,你能粘贴一些示例代码吗? – 2009-02-12 01:34:47

+0

我同意。这里有没有流式操作? – 2009-02-12 01:37:48

回答

4

考虑使用“使用”的成语,也是在VB.net

using(StreamReader reader = new StreamReader(...)) { 

} 

提供的流将得到关闭,即使抛出异常

考虑关闭所有的IDisposable实现这样

1

即使关闭/处置后仍然挂着,这似乎很奇怪。您是否正在使用FileStream和StreamReader?一般情况下,我用一个FileStream控制访问该文件,并且把这个给StreamReader的,一拉:

FileStream fsIn = new FileStream("path",FileMode.Open, FileAccess.Read, FileShare.None); 
StreamReader srIn = new StreamReader(fsIn, System.Text.Encoding.Default); 

//...do stuff.... 

srIn.close(); 
srIn.Dispose(); 
fsIn.close(); 
fsIn.Dispose(); 

更重要的是,如果你限制使用你的StreamReader的一种方法,坚持关闭/在最后处理。

0

确保流最终关闭。

FileStream fsIn = null; 
StreamReader srIn = null; 

try 
{ 
    fsIn = new FileStream("path",FileMode.Open, FileAccess.Read, FileShare.None); 
    srIn = new StreamReader(fsIn, System.Text.Encoding.Default); 

    //...do stuff.... 

} 
catch (Exception ex) 
{ 
} 
finally 
{ 
    srIn.close(); 
    srIn.Dispose(); 
    fsIn.close(); 
    fsIn.Dispose(); 
}