首页 > 代码库 > 关于文件保存/关闭时报错:文件正由另一进程使用,因此该进程无法访问此文件。

关于文件保存/关闭时报错:文件正由另一进程使用,因此该进程无法访问此文件。

起因:最近给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#\XMLTest\XMLTest\NewOne.xml";
40             MyXmlReader myReader = new MyXmlReader(path);
41             XmlNodeList nodeList = myReader.GetNodeList();
42             nodeList[1].Attributes["name"].Value = http://www.mamicode.com/"adschbgdsc";
43             myReader.SaveDoc(path);
44             Console.Write("Save Successfully");
45             Console.ReadKey();
46         }
47     }
48 }

 

关于文件保存/关闭时报错:文件正由另一进程使用,因此该进程无法访问此文件。