从asp.net Page_Load提供生成的文件后无法清理

时间:2014-03-27 14:20:23

标签: c# asp.net filelock

我想通过http请求参数从asp.net网页提供动态创建的二进制文件,如:www.host.com/?Download=file。到目前为止我已经

protected void Page_Load(object sender, EventArgs e)
{
  if (Request.Params.Allkeys.Contains("Download"))
  {
    String fileStr = Request.Params.GetValues("Download")[0];

    using (Stream generatedFile = File.Create(@"C:\Temp\file"))
    {
      /* write the contents of the file */
    }

    Response.ContentType = "application";
    Response.AddHeader("Content-Disposition",
                       "attachment; filename=" + fileStr);
    Response.WriteFile(@"C:\Temp\file");
    Response.End();
  }
}

哪个有效,但C:\ Temp \文件仍然存在,我想要清理它。在File.Delete(@"C:\Temp\file");之后调用Response.End()不起作用,因为Response.End()会杀死该主题。将 Response 方法放在using块中,File.Create( (...), FileOptions.DeleteOnClose)不起作用,因为 Response 方法无法访问该文件

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

将文件写入回复后,您可以致电Response.Flush以确保其已完整写入,然后在致电Response.End之前将其删除:

Response.WriteFile(@"C:\Temp\file");
Response.Flush();
File.Delete(@"C:\Temp\file");
Response.End();