C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: [ASP.NET]一定時間後にファイルを削除する


(過去ログ 95 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■56617 / inTopicNo.1)  [ASP.NET]一定時間後にファイルを削除する
  
□投稿者/ しゃろーん (1回)-(2011/01/21(Fri) 18:47:40)

分類:[ASP.NET (C#)] 

失礼します。質問がありますのでよろしくお願いします。

ASP.NETにてユーザーに画像をアップロードしてもらい、それをサーバーで加工し、ダウンロードしてもらうというものを作っています。

画像を返すプログラムが出来たのですが、今の状況ではサーバーに加工した画像が蓄積されてしまいます。

そこで画像の生成から5分ほどで作った画像ファイルを削除したいのですがどのようにすればいいでしょうか?
タイマーを使ったりしてみたのですが思い通りに動きませんでした。
この技術を使えばいい、等あればよろしくお願いいたします。

環境はVS2010、ASP.NET4.0です。
引用返信 編集キー/
■56618 / inTopicNo.2)  Re[1]: [ASP.NET]一定時間後にファイルを削除する
□投稿者/ 囚人 (579回)-(2011/01/21(Fri) 19:26:08)
サーバーでプログラムを動かしておき(サービスとして動かすのが良いかと)、5分に一回ぐらい動いて、ファイルの作成日時を見て削除するような感じでどうでしょう。
引用返信 編集キー/
■56619 / inTopicNo.3)  Re[2]: [ASP.NET]一定時間後にファイルを削除する
□投稿者/ todo (100回)-(2011/01/21(Fri) 19:26:24)
2011/01/21(Fri) 19:28:40 編集(投稿者)

Response.WriteFile 直後に削除すればよいのでは?

追記
Flushが必要?
http://oshiete.goo.ne.jp/qa/4029510.html
引用返信 編集キー/
■56620 / inTopicNo.4)  Re[3]: [ASP.NET]一定時間後にファイルを削除する
□投稿者/ しゃろーん (2回)-(2011/01/21(Fri) 19:46:48)
囚人さん、todoさん、アドバイスありがとうございます。

できれば別のプログラムを稼働させずにASP.NETの処理で完結できたら・・・と思っております。
それと少し説明不足でしたがダウンロードダイアログを開くのではなく、画面にimageコントロールがあり、処理が完了したらImageコントロールに画像を表示させたいと思っています(ImageコントロールはUpdatePanel内にあります)

どうにかこの条件ではできないでしょうか?
注文が多くて申し訳ありません;;難しければ別の方法を検討します。

引用返信 編集キー/
■56622 / inTopicNo.5)  Re[4]: [ASP.NET]一定時間後にファイルを削除する
□投稿者/ QQ (1回)-(2011/01/21(Fri) 21:04:47)
アップロードしたタイミングでファイル作成日付で削除すればいいかと
' 作成日時を取得する
Dim dtCreate As DateTime = System.IO.File.GetCreationTime(アップロードファイル名)


引用返信 編集キー/
■56623 / inTopicNo.6)  Re[4]: [ASP.NET]一定時間後にファイルを削除する
□投稿者/ 魔界の仮面弁士 (2032回)-(2011/01/21(Fri) 21:12:08)
No56620 (しゃろーん さん) に返信
> できれば別のプログラムを稼働させずにASP.NETの処理で完結できたら・・・と思っております。
即時削除ではなく「5分後に削除」ということであれば、
 (案1) 5分後に、クライアントから削除のために aspx を呼び出してもらう(window.setTimeout など)。
 (案2) 5分以上を要する長い非同期通信の中で、aspx から削除処理が実行される。
 (案3) ASP.NET の状況とは無関係に、別のサーバープログラムで削除処理が実行される。
 (案4) そもそも、一時ファイルを作らないような仕組みにする。
といった方向性になるように思います。


> この技術を使えばいい、等あればよろしくお願いいたします。
サーバー側の『タスク』に、「5分以上経過したファイルを削除」する exe を
定期的に起動させるように登録しておくというのは如何でしょう。


static int Main(string[] args)
{
    // 対象ディレクトリが指定されていない。
    if (args.Length != 1) return 9;

    string targetDir = args[0];
    try
    {
        // 5分前の時刻
        var limit = DateTimeOffset.Now.AddMinutes(-5d);

        // 削除対象のファイルを列挙
        var files = (from f in new DirectoryInfo(targetDir).GetFiles()
                     where f.LastWriteTimeUtc < limit
                     select f.FullName
                    ).ToList();

        // 発見したファイルを削除(削除できなかったファイルはスキップ)
        files.ForEach(delegate(string s) { try { File.Delete(s); } catch (Exception) { } });

        return 0;
    }
    catch (Exception)
    {
        // ディレクトリへのアクセス権が無かった場合など
        return 1;
    }
}

引用返信 編集キー/
■56624 / inTopicNo.7)  Re[1]: [ASP.NET]一定時間後にファイルを削除する
□投稿者/ とど (1回)-(2011/01/21(Fri) 23:45:25)
> タイマーを使ったりしてみたのですが思い通りに動きませんでした。

タイマーといっても3種類ありますがSystem.Timers.Timerは駄目ですか?
http://www.atmarkit.co.jp/fdotnet/dotnettips/374timerstimer/timerstimer.html
引用返信 編集キー/
■56631 / inTopicNo.8)  Re[2]: [ASP.NET]一定時間後にファイルを削除する
□投稿者/ しゃろーん (3回)-(2011/01/22(Sat) 17:33:11)
みなさんたくさんのアドバイス本当にありがとうございます!
とどさんのSystem.Timers.Timerを使ってみるとうまくいきました!

我がままではありますがほかのタスクを使わずに一ページのaspxで完結したいということです。そしてできれば他のアクセスに頼らず一定時間後に消したかったのです。

今までずっとSystem.Threding.Timerを使っていたのですが何故か時間がはかられずすぐにコールバックが起きてしまっていました。
もっと勉強することにいたします。

みなさんお手助けほんとうにありがとうございました!

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -