|
同一プロセスの複数スレッドからの排他制御であればスレッドセーフにすればよいですが、複数プロセスからのアクセスは別対処です。
その複数プロセスが全部自作であれば、ファイルを開くときに共有モードのレベルをゆるめにしておき、後続のプロセスがファイルを開けるようにしておきます。
FileStream fs = new FileStream("aaaa.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
で書き込む前に実際にロック fs.Lock(0, 1); // 数値は適当
ですが、この Lock メソッドはロックを獲得できなければ例外を出します。ロック解除を待ちたければ Win32 API の LockFileEx を DllImport して使います。
複数プロセスが自作でない、つまり自分の力が及ばない範囲であれば、先にファイルを開いたプロセスがどういう共有モードで開いているのか分からない限り、ファイルを開けるまでポーリングするしかなんじゃないでしょうか(他に良い方法があるかもしれませんが)。
|