■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;
}
}
|