どういうこと?
テンポラリーファイルは使用後に自動的には削除されません。IDisposableを実装したラッパーを作成することで、確実に削除されるようにできます。
どうして?
Disposeメソッドでテンポラリーファイルを削除するように実装すれば、using句のスコープを抜けたときに確実にファイルが削除されるようになります。
どうすれば?
ソースコードを記載します。
using System; using System.IO; namespace Common { /// <summary> /// ディスク上に作成された一意な名前を持つ 0 バイトの一時ファイルを表します。 /// 作成された一時ファイルは使用後に削除されます。 /// </summary> public class TemporaryFile : IDisposable { /// <summary> /// 作成された一時ファイルのパス付きファイル名です。 /// </summary> public string FullName { get { return this.fullName; } } private string fullName = Path.GetTempFileName(); #region 終了処理 /// <summary> /// ガベージ コレクションによってクリアされる前に、アンマネージ リソースを解放し、 /// その他のクリーンアップ操作を実行します。 /// </summary> ~TemporaryFile() { Dispose(); } private bool disposed = false; /// <summary> /// アンマネージ リソースの解放および終了処理を実行します。 /// </summary> public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } /// <summary> /// アンマネージ リソースの解放および終了処理を実行します。 /// </summary> /// <param name="disposing"> /// マネージ リソースとアンマネージ リソースの両方を解放する場合は true。 /// アンマネージ リソースだけを解放する場合は false。 /// </param> private void Dispose(bool disposing) { if (disposed) return; // アンマネージリソースを解放する。 try { File.Delete(this.fullName); } catch { } disposed = true; } #endregion 終了処理 } }