zoukankan      html  css  js  c++  java
  • 关于文件保存/关闭时报错:文件正由另一进程使用,因此该进程无法访问此文件。

    起因:最近给Unity上的游戏写关于存档的脚本,使用了xml。然后发现每次文件保存时,也就是调用XmlDocument.Save()对象方法的时候就会报错说该文件路径分享异常啥的我也不记得了。然后搞了半天,无果。猜测原因可能是因为文件被占用的原因,遂简化代码在新的解决方案里重现异常。

    如图:

    运行报错,第33行,“文件正由另一进程使用,因此该进程无法访问此文件。”

    网上找答案,这个异常网上也有答案,虽然他们的代码不是xml相关的但是错误原理相同。

    错误原因是:文件正在被流调用。要想保存/关闭文件,必须先关闭流。

    于是我在第22行文件读取过后,添加了一句

    1 reader.Close();

    读取完文件之后把流关掉。再次运行,显示“Save Successfully”,Xml文件也确实被修改了。

    下面附上修改后的完整代码

     1 using System;
     2 using System.Xml;
     3 
     4 namespace XMLTest
     5 {
     6     class MyXmlReader
     7     {
     8         public XmlDocument Doc;
     9         public string Path;
    10         public XmlReader reader;
    11 
    12         public MyXmlReader(string path)
    13         {
    14             Path = path;
    15             Doc = new XmlDocument();
    16             XmlReaderSettings setting = new XmlReaderSettings();
    17             setting.IgnoreComments = true;
    18             reader = XmlReader.Create(Path, setting);
    19             Doc.Load(reader);
    20             reader.Close();
    21         }
    22 
    23         public XmlNodeList GetNodeList()
    24         {
    25             XmlElement root = Doc.DocumentElement;
    26             return root.ChildNodes;
    27         }
    28 
    29         public void SaveDoc(string path)
    30         {
    31             Doc.Save(path);
    32         }
    33     }
    34 
    35     class Program
    36     {
    37         static void Main(string[] args)
    38         {
    39             string path = @"F:C#XMLTestXMLTestNewOne.xml";
    40             MyXmlReader myReader = new MyXmlReader(path);
    41             XmlNodeList nodeList = myReader.GetNodeList();
    42             nodeList[1].Attributes["name"].Value = "adschbgdsc";
    43             myReader.SaveDoc(path);
    44             Console.Write("Save Successfully");
    45             Console.ReadKey();
    46         }
    47     }
    48 }
  • 相关阅读:
    Editor REST Client
    log配置
    spring-boot-configuration-processor
    http请求
    做项目用到的一些正则表达式,贴出来共享
    批量插入的实现
    sql执行顺序对比
    Java常用的并发工具类:CountDownLatch、CyclicBarrier、Semaphore、Exchanger
    spring中bean的生命周期
    多属性的对象列表的两种排序方法
  • 原文地址:https://www.cnblogs.com/Yukisora/p/7273685.html
Copyright © 2011-2022 走看看