我有几个应用程序在不同的进程中运行,每个进程都写入硬盘驱动器上的中央xml文档。我使用命名的互斥锁来同步对文件的访问 - 但经常得到以下异常:
System.IO.IOException: The requested operation cannot be performed on a file with a user-mapped section open.
我意识到在获取互斥锁上的锁之前我正在调用File.Exists()
方法,这可能是原因吗?
更简单的说,任何人都可以确认该方法是否对文件执行读取检查是否存在?我想知道在检查文件是否存在之前是否需要锁定互斥锁。 我确实没有运行AV软件,因为这个异常似乎很常见。
当前代码的粗略示例:
private bool UpdateFile(string Text)
{
if (!File.Exists(@"C:\FileName.xml"))
return false;
else
{
using (Mutex mutex = new Mutex(false, "ExampleMutexName"))
{
mutex.WaitOne();
//Write to the file
mutex.ReleaseMutex();
}
return true;
}
}
编辑:我没有使用全局互斥锁,因为所有内容都运行在同一个用户帐户中 - 所以我相信本地互斥锁会没问题。但是,我开始的其中一个过程是冒充 - 这就是为什么我应该使用全局互斥锁。我的错误只是认为一切都在同一个用户帐户中运行,并且没问题。
答案 0 :(得分:1)
File.Exists
在出现错误时返回false并且不抛出。虽然它检查读取权限,但它不会读取文件的内容。P.S。:从索引服务中排除此文件也很不错。