我的网站在从pdf转换文档时创建了一堆png文件。我拥有唯一标识的所有文件,我希望它们在会话结束时被删除。我的想法是创建一个List,将其存储在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存储本地服务器的路径,所以文件路径没有错误。
答案 0 :(得分:3)
更强大的方法是在您的服务器(站点外部)上运行预定作业,定期清理此文件夹,删除超过特定年龄的文件。依靠会话超时这并不理想。
我还要注意,您没有告诉我们发生了什么错误或者文件未被删除的原因。如需更多帮助,请提供一些信息。
答案 1 :(得分:1)
将超时设置为20表示在放弃会话并执行代码之前需要20分钟。此外,Session_End事件不会触发,除非会话闲置并且当有人导航到另一个页面或关闭浏览器时不会触发,因此此代码可能无法始终清理目录。
我建议您在删除之前等待用户会话结束,而不是等待用户会话结束。