3

ファイルへのパスを指定して、このファイルを作成したいと思います。存在しない場合は、それにつながるディレクトリの文字列を作成します。しかし、私のプログラムの他のインスタンスが、ファイルが存在しないベースディレクトリを参照できるようにしたくありません。

基本的に、必要なディレクトリとファイルを一度にアトミックに作成したいと考えています。私が理解したところでは、2 つのステップ (ディレクトリの作成、ファイルの作成) で行う必要があるため、ロック ファイルを使用することを考えていましたが、同じ問題が適用されます。何レベルのフォルダーを作成する必要があるのか​​ わかりません。パスのある時点で、書き込み権限を失う可能性があるため、ロックファイルの「安全な場所」はありません。

次に、ロックファイルの代わりにロックディレクトリを使用することを考えましたが、ディレクトリを作成するための「テストと設定」方法が見つかりDirectory.CreateDirectory(path)ませんでした(何かをしたかどうかはわかりません)。

それで、それを行う正しい方法は何ですか?

4

2 に答える 2

5

ディレクトリとファイルを一時的な名前で作成し、ディレクトリの名前をアトミックに最終的な名前に変更します。

または、トランザクション NTFS を使用します (はるかに困難です)。

于 2012-08-21T14:02:11.780 に答える
1

プロセス間の同期を可能にする Mutex クラスを使用できます。

http://msdn.microsoft.com/en-us/library/system.threading.mutex.aspx

すべてのプロセスの疑似コードで

grab the mutex
try
 check or create directory and file
finally
release the mutex 

これは、同じ PC で実行されているローカル プログラム インスタンスに対して機能します。指定されていませんが、同じデータベースを使用するネットワーク上のプログラム インスタンスの場合、ミューテックスのような機能をデータベースに実装できます。

于 2012-08-21T14:05:12.787 に答える