我写了一个必须保存一些文件的网络应用程序。我使用Visual Web Developer 2010 Express在C#中开发了这个应用程序。该程序在VWD中完美运行,但是当我将其部署到服务器时,它会遇到问题。特别的一个问题是正在保存的文件由某个进程保留,我无法访问它们或在需要时删除它们。我相信我正在关闭文件流。以下是一个这样的保存示例:
string[] lines = MessagesTextbox.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
string messagesFileLocation = currDir + "\\" + reportDir + "\\" + messagesFile;
FileStream fs2 = File.Open(messagesFileLocation, FileMode.Create, FileAccess.Write);
using (StreamWriter sw = new StreamWriter(fs2))
{
sw.WriteLine("<Messages>");
foreach (string message in lines)
{
if (!message.Equals(""))
{
sw.WriteLine("\t<message>" + message + "</message>");
}
}
sw.WriteLine("</Messages>");
}
fs2.Close();
当我使用HtmlAgilityPack将呈现的HTML保存到文件时,也会出现问题。
我的开发环境和服务器之间的唯一区别是服务器上我的应用程序在IIS下运行。任何人都可以想到在我的开发环境中不会发生这种问题时可能会出现这个问题的原因吗?管理服务器的人认为它必须是我的代码,但就像我说的那样,它已经在我自己的机器上运行了几个星期而没有任何这些问题。
任何建议都表示赞赏。
问候。
答案 0 :(得分:2)
如果抛出异常,则不会关闭FileStream fs2。您必须在 finally 块中关闭它,如果您使用将其包装在自己的中,则可以免费获得。
实现 IDisposable 的所有内容应该包含在使用块中(或者针对某些高级案例进行处理)作为良好编码的问题实践。有一些边缘情况可以确定哪些无关紧要,但是一旦确定不再需要实现接口的对象,就始终确保调用 IDisposable.Dispose()是一个坚实的习惯。