FileStream
コンストラクタを使用して、一度に1つのプロセスだけがファイルにアクセスできるようにすることはできますか?次のコードは動作しますか?FileStreamを使用してファイルロックを実装できますか?
public static IDisposable AcquireFileLock() {
IDisposable lockObj;
do {
// spinlock - continually try to open the file until we succeed
lockObj = TryOpenLockFile();
// sleep for a little bit to let someone else have a go if we fail
if (lockObj == null) Thread.Sleep(100);
}
while (lockObj == null);
return lockObj;
}
private static FileStream TryOpenLockFile() {
try {
return new FileStream(s_LockFileName, FileMode.Create, FileAccess.Read, FileShare.None);
}
catch (IOException) {
return null;
}
}
具体的には、FileMode.Create
アトミックWRTの他のプロセスの動作ですか?私が使っているはずのものがありますか?
EDIT:具体的には、これはMicrosoft CLR上で、1台のマシン上のローカルファイルを使用して行われます。
これは良い見えます!しかし、誰がロックファイルをクリーンアップしますか? 'FileStream'呼び出しは常に既存のロックファイルを上書きするので、おそらくこれを行う必要はありません。 –
クリーンアップのために、私はいつも '{File.Delete(...)}'を試して例外を無視することができました...( – thecoop