0

次のようなhttpリクエストパラメータを介して、asp.net Webページから動的に作成されたバイナリファイルを提供したいと考えています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 はまだ存在するため、クリーンアップしたいと思います。スレッドを強制終了するため、呼び出しFile.Delete(@"C:\Temp\file");後の呼び出しResponse.End()は機能しません。Response.End()Responseメソッドをブロック内に配置しても、Responseメソッドはファイルのアクセスに失敗するため、機能しません。usingFile.Create( (...), FileOptions.DeleteOnClose)

助言がありますか?

4

1 に答える 1

1

応答にファイルを書き込んだ後、呼び出しResponse.Flushて完全に書き込まれたことを確認し、呼び出す前に削除できResponse.Endます。

Response.WriteFile(@"C:\Temp\file");
Response.Flush();
File.Delete(@"C:\Temp\file");
Response.End();
于 2014-03-27T14:25:12.803 に答える