【发布时间】:2010-11-29 17:59:58
【问题描述】:
我可以使用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 atomic WRT 其他进程的行为?还有什么我应该使用的吗?
编辑:更具体地说,这是在 Microsoft CLR 上使用单台计算机上的本地文件。
【问题讨论】:
-
这看起来不错!谁清理了锁定文件?可能没有功能需要这样做,因为
FileStreamctor 调用总是覆盖现有的锁定文件。 -
为了清理,我总是可以
try { File.Delete(...) }并忽略任何异常(因为这意味着另一个进程同时已获得锁定)...
标签: .net filestream file-locking