アプリケーションが停止すると自動的に削除される一時ディレクトリを使用したいと思います。
そのようなメカニズムはフレームワークに存在しますか、それとも自分でプログラムする必要がありますか?
ありがとう !
アプリケーションが停止すると自動的に削除される一時ディレクトリを使用したいと思います。
そのようなメカニズムはフレームワークに存在しますか、それとも自分でプログラムする必要がありますか?
ありがとう !
それを行う組み込みのものは何もありません。起動時にフォルダーを作成し、そのフォルダー内のファイルをロックして、別のプロセスによる削除を防ぐことができますが、それで十分だと確信しています。
アプリが実行されていない場合にこのフォルダーがまったく存在しないことが重要な場合は、アプリとフォルダーの両方の状態を監視するサービスが必要になります。このようにして、アプリがクラッシュしたり、コンピューターが再起動したりした場合、これらのシナリオのいずれかを過ぎると、フォルダーにアクセスできないことが (合理的に) 確実になります。もちろん、起動時にサービスを自動的に開始する必要があります。
私の知る限り、ディレクトリの組み込みメソッドは存在しませんが、使い捨てクラスとusing
構成を作成することで、その動作を簡単に模倣できます。これにより、アプリが予期せず終了した場合でもフォルダーが確実に削除されます。
public class TempFolder : IDisposable
{
public string RootPath { get; private set; }
public TempFolder()
{
RootPath = Path.GetTempPath();
}
public void Dispose()
{
Directory.Delete(RootPath, true);
}
}
次に、アプリケーションで次のようにします。
パブリック静的クラス MyApp {
public static void Main(string[] args)
{
using(var tempFolder = new TempFolder())
{
// Do my stuff using tempFolder.RootPath as base path to create new files
}
// temporal directory will be deleted when we reach here
// even if an exception is thrown! :)
}
}
これは単純化したアプローチであることに注意してください。一時ディレクトリ内のロックされたファイルに注意してください。Directory.Delete
操作が失敗する可能性があります
また、場合によっては、Dispose
メソッドを呼び出すことができませんでした:
StackOverflowException
およびのようないくつかのキャッチできない例外OutOfMemoryException
ところで、ファイルを操作する必要があるいくつかの NUnit テストを処理するために同様のアプローチを使用していますが、これまでのところ正常に動作しています。
また、アプリケーションが通常とは異なる方法で終了する可能性があることにも注意してください。たぶん、コンピューターの電源を切ることさえあります。そのため、プログラムを再起動したときに、フォルダーが既に存在している可能性があります。
Windows API は、ファイルへの最後のハンドルが閉じられたときにファイルが削除されるように作成されるファイルをサポートしています。ただし、ディレクトリにそのようなものが存在するかどうかはわかりません。System.IO.File.CreateFile();
および説明を参照してくださいFileOptions.DeleteOnClose
。また、基になる Win32 APIも調べてください。おそらく、ニーズに合わせて調整できます。