我可以使用FileStream
構造函數來確保一次只有一個進程訪問文件嗎?下面的代碼會起作用嗎?我可以使用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其他進程的行爲?有什麼我應該使用?
編輯:更具體地說,這是Microsoft CLR在單個機器上使用本地文件。
這看起來不錯!誰清理鎖文件?由於`FileStream``ctor調用總是覆蓋現有的鎖定文件,因此可能沒有功能需要這麼做。 – 2010-11-29 18:17:38
對於清理,我總是可以`嘗試{File.Delete(...)}`並忽略任何異常(因爲這意味着另一個進程在此期間進行了鎖定)... – thecoop 2010-11-29 18:24:42