2016-01-13 4 views
1

У меня возникли проблемы с сохранением моего XML-файла после вызова нагрузки. Эта функция вызывается дважды - один раз, когда для параметра «toSave» установлено значение «ложь», а затем второй раз, когда для него установлено значение «Истина». Во втором раунде сохранение вызывает исключение. Я попытался добавить вызов Dispose и Close в XMLReader, но ничего не помогает. Вот код:C# XMLDocument Сохранить - процесс не может получить доступ к файлу, потому что он используется другим процессом

// Check if the file exists 
if (File.Exists(filePath)) 
{ 
    try 
    { 
     // Load the file 
     XmlReaderSettings readerSettings = new XmlReaderSettings(); 
     readerSettings.IgnoreComments = true; 
     XmlReader reader = XmlReader.Create(filePath, readerSettings); 

     XmlDocument file = new XmlDocument(); 
     file.Load(reader); 

     XmlNodeType type; 
     type = file.NodeType; 
     if (toSave) 
      ModifyXMLContents(file.FirstChild.NextSibling, null); 
     else 
      PopulateNode(file.FirstChild.NextSibling, null); 

     // Save if we need to 
     if (toSave) 
      file.Save(filePath); 

     reader.Dispose(); 
     reader.Close(); 
    } 
    catch (Exception ex) 
    { 
     // exception is: "The process cannot access the file d:\tmp\10.51.15.2\Manifest.xml" because it is being used by another process 
     Console.WriteLine(ex.Message); 
    } 
} 

Любая помощь была бы принята с благодарностью.

+4

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

+0

Я бы предложил просмотреть эту статью в отношении того, как эффективно создавать XML-документ. [Другие технологии XML] (http://www.albahari.com/nutshell/ch11.aspx) – MethodMan

+0

Вы пытаетесь сохранить файл перед тем, как закрыть читатель. Скорее всего, у читателя есть блокировка файла. Попробуйте закрыть читатель перед вызовом 'Save' (и подумайте об использовании блока' using'). – Tim

ответ

3

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

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

Например:

XmlReaderSettings readerSettings = new XmlReaderSettings(); 
readerSettings.IgnoreComments = true;    

XmlDocument file = new XmlDocument(); 

using (XmlReader reader = XmlReader.Create(filePath, readerSettings))    
    file.Load(reader); 

/* do work with xml document */ 

if (save) 
    file.Save(filePath); 
0

Для меня это было вызвано файла переписано в директорию с МНОГИХ (100k) другие файлы. Как только я очистил все остальные файлы, проблема исчезла. Похоже, что NTFS становится раскрученным с очень большим количеством файлов в одной папке.

Смежные вопросы

 Смежные вопросы