Не открывать несколько копий файла в приложении WPF - PullRequest
0 голосов
/ 31 марта 2011

У меня есть приложение 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 голосов
/ 31 марта 2011

Вам нужно держать файл открытым все время, когда вы «редактируете» его с момента начала редактирования до закрытия (при условии, что у вас есть отдельные процессы для каждого экземпляра вашего приложения).

Ваш код выглядит так, как будто вы открываете файл внутри метода и, вероятно, закрываете его внутри этого метода, либо используя "using", как рекомендовано для коротких файловых операций, либо просто позволяя GC закрыть его. В результате вы на некоторое время блокируете файл, но освобождаете его достаточно быстро, чтобы другие экземпляры могли снова открыть его.

Обратите внимание, что если ваше приложение реализует какой-то подход с использованием единственного экземпляра, этой блокировки может быть недостаточно, поскольку все открытые операции будут выполняться из одного и того же процесса.

...