【发布时间】:2014-06-06 14:43:15
【问题描述】:
我的网站在从 pdf 转换文档时创建了一堆 png 文件。我拥有唯一标识的所有这些文件,我希望在会话结束时将它们删除。我的想法是创建一个列表,将其存储在 Session 中,并通过存储在我的 List 中的路径删除每个文件。
在 Global.asax 我添加了:
void Session_End(object sender, EventArgs e)
{
if (Session["cleanUpCollection"] != null)
{
List<String> deletePaths = ((List<string>)(Session["cleanUpCollection"]));
foreach(String s in deletePaths)
{
try
{
System.IO.File.Delete(s);
}
catch { }
}
}
}
在 web.config 我添加了这个:
<sessionState mode="InProc" cookieless="false" timeout="20" />
但文件仍位于临时位置。 我还没有测试失败的地方,但是在会话结束时删除临时文件有更好、更常见的做法吗? 顺便说一句,我验证并 cleanUpCollection 存储本地服务器的路径,因此文件路径没有错误。
【问题讨论】:
-
你处理这件事的方式对我来说很有意义。你确定这些文件还没有被使用吗? Image 和 Bitmap 类有一些非常喜欢挂在引用上的方法;如果您不处置该类,则文件引用仍处于打开状态,并且文件删除将在会话结束时失败。
-
@Lynn Crumbling - 看起来 Session_End 和 Application_End 中的代码没有被执行。我添加了一些代码来将日志条目写入 Application_Start、end 和 Session_End 上的 txt 文件,以及为生成这些 PNG 文件的页面添加 Page_Unload。在 Unload 事件中,我要求应用列出刚刚放置在 Session 变量中的所有字符串项(文件路径)。在 Application_Start 和 Page_Unload 上正确创建日志条目。没有来自 Session_End 和 Application_End 事件的条目,因此导致我得出事件未正确触发的结论。
-
首先 - 您是否在 Session_End 中使用任何请求、响应或服务器对象?如果是这样,那是你的例外。