0

我有一个 WPF 应用程序,它可以打开和编辑 XML 文件。目前,应用可以多次启动,多个实例可以打开同一个文件。我需要锁定文件,这样,当一个文件打开时,它不会让应用程序的另一个实例打开文件。我尝试在打开文件时使用 FileShare.None 属性以及 FileStream.Lock(),但由于某种原因,这些都无法阻止应用程序的单独实例打开它。

编辑:相关代码

try
{
    FileStream iStream = File.Open(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
    iStream.Lock(0, iStream.Length);

    // DO STUFF WITH FILE HERE
}
catch (System.IO.IOException ioException)
{
    // Raise exception to higher level, where application will terminate. 
    throw (ioException);
}
4

1 回答 1

0

从开始编辑到关闭(假设您的应用程序的每个实例都有单独的进程),您需要始终保持文件打开状态。

您的代码看起来像是在方法内部打开文件,并且可能通过使用“使用”作为短文件操作的推荐方法或只是让 GC 关闭它来关闭它。结果,您将文件锁定了一段时间,但很快将其释放,以便其他实例能够再次打开它。

请注意,如果您的应用程序实现了某种单实例方法,那么这种锁定可能还不够,因为所有打开的操作都将在同一个进程中执行。

于 2011-03-31T02:33:27.773 回答