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



我创建了一个名为 Shipping 的类,它具有以下静态方法:

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已经写入的同一文件(因为它们都共享相同的路径(。

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

您看到的问题可能是因为WriteAddressWriteDate方法正在尝试打开已打开的文件。

当您调用XmlWriter.Create时,文件被"锁定",因此只能使用w变量写入该文件,并且在您调用w.Close()之前保持锁定状态。

最好的选择是将w变量作为参数传递给WriteAddressWriteDate方法,并将其写入文件。

此外,作为建议,请考虑将代码放入 using 块中。这样,如果任何方法引发异常,您就不会留下文件仍处于锁定状态。

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

  1. 在执行WriteDateWriteAddress方法之前,WriteShipment中关闭XmlWriter。完成后重新打开它
  2. 与其在WriteData/Address中打开和写入文件,不如返回一个字符串,然后将其写入WriteShipment中的文件。是否有任何情况需要直接使用WriteData/Address编写,而不是通过WriteShipment方法作为一部分编写?

相关内容

最新更新