我创建了一个名为Shipment的类,它有以下静态方法:
public static void WriteShipment(Shipment s, string path)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = "\t";
XmlWriter w = XmlWriter.Create(path, settings);
w.WriteStartDocument();
w.WriteStartElement("Shipment");
w.WriteStartElement("id");
w.WriteString(s.id);
w.WriteEndElement();
Address.WriteAddress(s.from, path);
Address.WriteAddress(s.to, path);
Date.WriteDate(s.receiveDate, path);
Date.WriteDate(s.deliverDate, path);
w.WriteStartElement("sum");
w.WriteValue(s.sum);
w.WriteEndElement();
w.WriteStartElement("currency");
w.WriteString(s.currency);
w.WriteEndElement();
w.WriteStartElement("paid");
w.WriteValue(s.paid);
w.WriteEndElement();
w.WriteEndElement();
w.WriteEndDocument();
w.Close();
}
我正在尝试编写一个接收Shipment
类实例的方法,并创建一个包含其详细信息的XML文件。
Shipment的某些字段属于Address
和Date
,这是我创建的其他类。它们还具有静态方法,这些方法将作为参数接收的实例的详细信息写入XML文件。
WriteAddress
和WriteDate
方法运行良好,但当我尝试在WriteShipment
方法中调用它们时,我在运行时遇到以下异常 -
“进程无法访问文件,因为它被另一个进程使用”
我发现它发生是因为WriteAddress
和WriteDate
正在尝试写入已写入的同一文件WriteShipment
(因为它们都共享相同的路径)。
有没有办法克服这个问题?我试过的任何其他解决方案都证明是徒劳的或引起其他问题。
答案 0 :(得分:0)
有很多方法可以解决这个问题。以下是一些建议。
XmlWriter
和WriteShipment
方法之前,关闭WriteDate
中的WriteAddress
。完成后重新打开WriteData/Address
中打开和写入文件,而是返回一个字符串,然后将其写入WriteShipment
中的文件。是否需要使用WriteData/Address
直接编写,而不是WriteShipment
方法的一部分?