.NET StreamReader无法关闭

时间:2009-02-12 01:29:18

标签: asp.net vb.net rtf streamreader

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

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

3 个答案:

答案 0 :(得分:4)

考虑使用“使用”这个成语,也可以在VB.net中找到

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

}

即使抛出异常,流也会关闭

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

答案 1 :(得分:1)

即使在关闭/处置之后它仍然悬挂,这似乎很奇怪。您是否正在使用FileStream和StreamReader?通常,我使用FileStream来控制对文件的访问并将其提供给StreamReader,la:

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的使用限制在一个方法中,请将Close / Dispose放在最后。

答案 2 :(得分: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();
}