2

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

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

4

3 回答 3

4

考虑使用“使用”成语,也可在 VB.net 中使用

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

}

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

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

于 2009-02-12T02:08:19.950 回答
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 的使用限制为一种方法,请将 Close/Dispose 粘贴到 finally。

于 2009-02-12T01:40:14.637 回答
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();
}
于 2009-02-16T09:07:47.603 回答