我可以使用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 上使用单台机器上的本地文件。