- - PR -
ファイルをダウンロード後に削除する
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-03-11 13:06
サーバ側で一時的に作成したファイルを、クライアント側でダウンロードさせた後、ファイルを削除したいのですが、うまくいきません。
ダウンロードはできるのですが、ファイルが削除されないのです。 開発環境 WinXP(SP1) + VS 2003 (ASP.NET + C#) <Webフォーム上のコード> Response.Clear(); //コンテンツタイプの設定 Response.ContentType = "application/octet-stream"; //ヘッダの追加 Response.AppendHeader("content-disposition", "file; filename=\"" + fileName + "\""); //ファイルをバイト単位で応答オブジェクトに転送 FileInfo fileToDownload = new FileInfo(fullPathFileName); long nSize = fileToDownload.Length; //エンコード HttpUtility.UrlEncode(fullPathFileName); Response.Flush(); Response.WriteFile(fileToDownload.FullName, 0, nSize); Response.End(); //ファイルの削除 File.Delete(fullPathFileName); |
|
投稿日時: 2005-03-11 13:21
Response.End();
をした後は処理を受け付けてくれなかった気がします。 |
|
投稿日時: 2005-03-11 14:28
先日、同様の処理を組み込んだので、
参考まで、そのソースの一部を。 たしかにResponse.FlushではなくResponse.Endを 使用するとファイルが消えませんでしたね。 ------------------------------------- string filename = "File01"; try{ //サーバー上にファイル出力 srvOutput(filename); //ダウンロード処理 Response.AppendHeader("Content-Disposition","attachment;filename="+filename ); Response.ContentType="Application/octet-stream"; Response.WriteFile(filename); Response.Flush(); } catch( Exception ex ){ //エラー処理? } finally{ System.IO.File.Delete(filename); } |
|
投稿日時: 2005-03-11 17:04
HttpResponse.End() を呼ぶとThreadAbortExceptionを投げます。
「応答を途中で終了する=ThreadをAbortする」だからです。この例外はちょっと特殊な例外ですんで細かいことはリファレンスで調べてください。 理由は以上のとおりですが、終了処理(この場合はファイルの削除)させたいならはぎ丸さんのようにfinallyに常にかく習慣をつけましょう。どこで例外が起こるかわかりませんから(例外が発生しても実行されます)。 |
1