IO异常(XML) - 进程无法访问该文件,因为它被另一个进程

时间:2018-05-11 03:03:32

标签: c# xml exception io ioexception

我创建了一个名为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的某些字段属于AddressDate,这是我创建的其他类。它们还具有静态方法,这些方法将作为参数接收的实例的详细信息写入XML文件。

WriteAddressWriteDate方法运行良好,但当我尝试在WriteShipment方法中调用它们时,我在运行时遇到以下异常 -

  

“进程无法访问文件,因为它被另一个进程使用”

我发现它发生是因为WriteAddressWriteDate正在尝试写入已写入的同一文件WriteShipment(因为它们都共享相同的路径)。

有没有办法克服这个问题?我试过的任何其他解决方案都证明是徒劳的或引起其他问题。

1 个答案:

答案 0 :(得分:0)

有很多方法可以解决这个问题。以下是一些建议。

  1. 在执行XmlWriterWriteShipment方法之前,关闭WriteDate中的WriteAddress。完成后重新打开
  2. 不是在WriteData/Address中打开和写入文件,而是返回一个字符串,然后将其写入WriteShipment中的文件。是否需要使用WriteData/Address直接编写,而不是WriteShipment方法的一部分?