我在WPF中有2个按钮。
第一个将信息写入XML 第二个将其恢复为List
写功能:
public static void Write(List<string> numbers) {
XmlWriterSettings myWriterSettings = new XmlWriterSettings();
myWriterSettings.CloseOutput = true;
myWriterSettings.NewLineOnAttributes = true;
using (XmlWriter myWriter = XmlWriter.Create(XMLPathRestore, myWriterSettings)) {
myWriter.WriteStartDocument();
myWriter.WriteStartElement("Something");
//Writing numbers into XML
myWriter.WriteEndElement();
myWriter.WriteEndDocument();
myWriter.Close();
}
}
阅读功能:
public static List<string> Read() {
List<string> numbers = new List<string>();
XmlReaderSettings myReaderSettings = new XmlReaderSettings();
myReaderSettings.CloseInput = true;
if (File.Exists(XMLPath) == true) {
XmlReader myReader = XmlReader.Create(XMLPath, myReaderSettings);
while (myReader.Read()) {
//Fill List<string> numbers from XML
}
}
return concernNumbers;
}
当我现在交替读取和写入几次后,我将得到一个System.IO.IOException,告诉我该进程无法访问XML文件,因为它被另一个进程使用。
我想我可以通过在编写器和阅读器上将CloseInput设置为true来处理这个问题,但它不起作用。
有没有人有想法?
答案 0 :(得分:3)
你已经有一个using
- 阻止作者,当该块被留下时应该自动关闭XmlWriter
。在阅读代码中添加使用块应该可以正常工作
using (XmlReader myReader = XmlReader.Create(XMLPath, myReaderSettings))
{
while (myReader.Read()) {
//Fill List<string> numbers from XML
}
}
通常,使用IDisposable
与using
实施Dispose
的类来确保调用$memberDetails = new MemberSearch();
$results=ArrayHelper::toArray($memberDetails ,[
'common\models\Member'=>[
'id',
'name',
...
...
]
] );
并清除所有资源。
答案 1 :(得分:1)
阅读完毕后关闭读者:
myReader.Close();
答案 2 :(得分:0)
using (var reader = XmlReader.Create(XMLPath, myReaderSettings)
{
while (myReader.Read()) {
}
}
使用块将在完成后处理每个读者实例,我建议你使用using block