2013-11-13 5 views
0

У меня есть программа, написанная на .NET 3.5, которая сохраняет данные в XML-файл, и большую часть времени оставит ее в покое. Однако иногда ему нужно снова прочитать этот XML-файл. Когда я пытаюсь это сделать, чтение XML-файла выходит из строя с ошибкой, что файл «используется другим процессом».DataSet.WriteXml (XmlTextWriter) Листы заблокированные XML

Вот код, который выполняет XML файла записи:

DataSet ds = new DataSet(); 
ds.Tables.Add(populatedDataTable); 

XmlTextWriter xmlWrite = new XmlTextWriter("C:\test\output.xml", Encoding.UTF8); 
ds.WriteXml(xmlWrite); 
xmlWrite.Close(); 

И вот код, который пытается прочитать файл XML обратно в:

TextReader tr = new StreamReader("C:\test\output.xml"); 
DataSet dsXmlData = new DataSet(); 
dsXmlData.ReadXml(tr); 

Поскольку метод XmlTextWriter.Close() запускается в первом блоке, почему файл все еще будет использоваться? Я попытался вызвать метод Dispose() в DataSet в первом блоке, но это не помогло. Что здесь можно пропустить?

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

Спасибо!

+0

Вы должны действительно использовать статический метод XmlWriter.Create в соответствии с MSDN. –

ответ

2

Я смог решить проблему, изменив логику, чтобы использовать операторы вместо создания XmlTextWriter, а затем закрывать ее вручную.

Вот старый код:

XmlTextWriter xmlWrite = new XmlTextWriter("C:\test\output.xml", Encoding.UTF8); 
ds.WriteXml(xmlWrite); 
xmlWrite.Close(); 

Вот новый код, который не имеет проблемы больше:

using(XmlTextWriter xmlWrite = new XmlTextWriter("C:\test\output.xml", Encoding.UTF8)) 
    ds.WriteXml(xmlWrite); 

Для тех, любопытно, у меня нет ответа, почему использование заявления решает проблему, но я рад, что сработал.

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