Ошибка: файл не может быть доступен как файл, к которому обращается другой процесс - PullRequest
0 голосов
/ 06 августа 2009

Я работаю над проектом, в котором мне нужно записать XML в файл, это происходит в цикле for,

то есть

for(int i = 0; i < screens.length; screens++)
{
    XMLDocument allScreens = new XMLDocument();
    allScreens.Load(allScreeensPath);
    XMLNode node = allScreens.Select("//Screen[@name='" + screens[i].name + "']");
    allScreens.Remove(node);
    allScreens.Add(nweNode);
    allScreens.Save(allScreeensPath);
}

В основном XML-документ доступен, изменен и сохранен в цикле for, это работает несколько раз. и иногда я получаю следующую ошибку,

Я пытаюсь использовать программы чтения текста, текстовые редакторы для выполнения файловых операций (чтобы я мог закрыть их, утилизировать авторы), но ошибка сохраняется. Как мне пройти через это?

Ответы [ 3 ]

5 голосов
/ 06 августа 2009

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

XMLDocument allScreens = new XMLDocument();
allScreens.Load(allScreeensPath);

for(int i = 0; i < screens.length; screens++)
{
    XMLNode node = allScreens.Select("//Screen[@name='" + screens[i].name + "']");
    allScreens.Remove(node);
    allScreens.Add(nweNode);
}
allScreens.Save(allScreeensPath);

(я не уверен, где nweNode входит в картинку в примере кода, но я оставляю это, поскольку я только переработал исходный пример кода)

4 голосов
/ 06 августа 2009

Самый простой подход - загрузить его один раз, выполнить всю необходимую обработку, а затем сохранить его один раз.

Я не знаю, почему это не работает в настоящее время, по общему признанию - но я не вижу необходимости продолжать загружать и сохранять. Например, вот альтернативная версия вашего кода:

XMLDocument allScreens = new XMLDocument();
allScreens.Load(allScreeensPath);
foreach (Screen screen in screens)
{
    XMLNode node = allScreens.Select("//Screen[@name='" + screen.Name + "']");
    allScreens.Remove(node);
    allScreens.Add(newNode);
}
allScreens.Save(allScreeensPath);
0 голосов
/ 06 августа 2009

Похоже, вы обновляете один и тот же файл несколько раз?

Вы должны выполнить все обновления вашего XMLDocument в памяти и после цикла for сохранить в файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...