保持在WPF应用程序中打开多个文件副本

时间:2011-03-31 02:01:28

标签: c# wpf c#-4.0 file-locking

我有一个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);
}

1 个答案:

答案 0 :(得分:0)

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

您的代码看起来像是在方法中打开文件,并且很可能通过使用“使用”建议用于短文件操作或仅让GC关闭它来关闭此方法。因此,您可以锁定文件一段时间,但很快就会将其释放,以便其他实例能够再次打开它。

请注意,如果您的应用程序实现某种单实例方法,则此锁定可能不够,因为所有打开操作都将从同一进程执行。