C# WPF XMLReader 和 XMLWriter System.IO.IOException
C# WPF XMLReader and XMLWriter System.IO.IOException
我在 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 文件,因为它被另一个进程使用。
我想我可以通过在 writer 和 reader 上将 CloseInput 设置为 true 来处理这个问题,但它不起作用。
有人知道吗?
阅读完后关闭您的reader:
myReader.Close();
您已经在编写器上有一个 using
块,当块离开时应该自动关闭 XmlWriter
。在读取代码中添加一个 using 块应该可以工作
using (XmlReader myReader = XmlReader.Create(XMLPath, myReaderSettings))
{
while (myReader.Read()) {
//Fill List<string> numbers from XML
}
}
通常,使用 类 实现 IDisposable
和 using
是一种很好的做法,以确保调用 Dispose
并清理所有资源。
using (var reader = XmlReader.Create(XMLPath, myReaderSettings)
{
while (myReader.Read()) {
}
}
using 块将在完成后处理每个 reader 实例,我建议您使用 using block
我在 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 文件,因为它被另一个进程使用。
我想我可以通过在 writer 和 reader 上将 CloseInput 设置为 true 来处理这个问题,但它不起作用。
有人知道吗?
阅读完后关闭您的reader:
myReader.Close();
您已经在编写器上有一个 using
块,当块离开时应该自动关闭 XmlWriter
。在读取代码中添加一个 using 块应该可以工作
using (XmlReader myReader = XmlReader.Create(XMLPath, myReaderSettings))
{
while (myReader.Read()) {
//Fill List<string> numbers from XML
}
}
通常,使用 类 实现 IDisposable
和 using
是一种很好的做法,以确保调用 Dispose
并清理所有资源。
using (var reader = XmlReader.Create(XMLPath, myReaderSettings)
{
while (myReader.Read()) {
}
}
using 块将在完成后处理每个 reader 实例,我建议您使用 using block