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

标签 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 方法中调用它们时,出现以下异常在运行时 -

"the process cannot access file because it is used by another process"

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

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

最佳答案

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

当您调用 XmlWriter.Create 时,文件将被“锁定”,因此只能使用 w 变量对其进行写入,并且它仍然保留锁定,直到您调用 w.Close()

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

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

关于c# - IO 异常 (XML) - 该进程无法访问该文件,因为该文件已被另一个进程使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50284381/

相关文章:

XML 和 "flags"

java - 为什么直接将 Arrays.asList() 分配给 var 时会出现 AssertionError?

android - 如何为 Gingerbread 上运行的应用授予 MODIFY_PHONE_STATE 权限

c# - 从反序列化期间添加的 JObject 中删除双大括号

c# - 如何获取星期几的整数值

c# - ASB MessageReceiver ReceiveAsync 崩溃

c# - 聪明的。 C#中的硬盘数据

python - 将 Python XML ElementTree 转换为字符串

c# - 嵌套 XML 形式的数据集

c# - 构造异常消息的最佳做法是什么?