我正在使用RTF文件作为ASP.NET Web应用程序的模板。我的VB.NET代码使用StreamReader读取文件,替换一些字符串,并使用数据库中的数据创建一个新的Word文档。我的代码关闭并处理StreamReader。但是,当我尝试将修改后的RTF文件上传到Web服务器时,出现错误,“无法打开文件进行写入”。很明显,文件在ASP.NET页面运行后很久就会保持打开状态。
如何强制StreamReader关闭?即使编辑web.config文件以强制Web应用程序重新启动也不足以终止此文件的锁定。
答案 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();
}