Блокировка XML-файла (расположенного на сервере), когда одно и то же приложение (с 2 разных компьютеров) пытается записать в него - PullRequest
0 голосов
/ 07 сентября 2010

У меня есть winapp, который записывает данные в XML (Data.xml).Этот xml - мое хранилище данных.

Winapp будет использоваться по крайней мере 10 чел.Иногда 2 пользователя могут импортировать некоторые данные и сохранять их в Data.xml (импорт обычно занимает 60-100 секунд).В течение этого периода, когда процесс получил первый доступ к Data.xml, он должен заблокировать его, а другой процесс должен быть проинформирован о том, что кто-то другой импортирует.(я не использовал никаких концепций потоков)

Я попробовал следующее: -

FileAttributes fileAttributes = File.GetAttributes(m_sDataXMLPath);
if ((fileAttributes & FileAttributes.ReadOnly) != FileAttributes.ReadOnly)
{
    try
    {
        FileStream currentWriteableFile = File.OpenWrite(m_sDataXMLPath);
        currentWriteableFile.Close();
    }
    catch
    {
        throw; // throw the IO exception so that the other process gets the 
               // exception which is ok with my requirement. 
               // the user just needs to know.
    }
}

Выше работает, если я запускаю 2 экземпляра winapp на одном компьютере, но не удается, когда яЯ запускаю их на 2 отдельных машинах!

Пожалуйста, дайте мне несколько советов по блокировке, а затем сообщите другому пользователю, что кто-то другой пишет в него.

1 Ответ

0 голосов
/ 07 сентября 2010

Почему вы используете GetAttributes ()?Файл может иметь атрибут ReadOnly и все еще быть читаемым.Просто откройте файл для записи и удерживайте его до завершения записи.

using (FileStream file = File.Open("c:\\yourpath\\file.xml", FileMode.Create, FileAccess.Write))
{
... // Here the file is locked
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...