- PR -

ファイルをダウンロード後に削除する

1
投稿者投稿内容
未記入
会議室デビュー日: 2005/03/08
投稿数: 2
投稿日時: 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/02/07
投稿数: 86
投稿日時: 2005-03-11 13:21
Response.End();
をした後は処理を受け付けてくれなかった気がします。
はぎ丸
常連さん
会議室デビュー日: 2005/02/02
投稿数: 36
投稿日時: 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);
}
ya
大ベテラン
会議室デビュー日: 2002/05/03
投稿数: 212
投稿日時: 2005-03-11 17:04
HttpResponse.End() を呼ぶとThreadAbortExceptionを投げます。
「応答を途中で終了する=ThreadをAbortする」だからです。この例外はちょっと特殊な例外ですんで細かいことはリファレンスで調べてください。

理由は以上のとおりですが、終了処理(この場合はファイルの削除)させたいならはぎ丸さんのようにfinallyに常にかく習慣をつけましょう。どこで例外が起こるかわかりませんから(例外が発生しても実行されます)。
1

スキルアップ/キャリアアップ(JOB@IT)