1. 程式人生 > >關於文件保存/關閉時報錯:文件正由另一進程使用,因此該進程無法訪問此文件。

關於文件保存/關閉時報錯:文件正由另一進程使用,因此該進程無法訪問此文件。

讀取 顯示 對象 必須 文件 ons 完整 comment static

起因:最近給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 = "adschbgdsc"; 43 myReader.SaveDoc(path); 44 Console.Write("Save Successfully"); 45 Console.ReadKey(); 46 } 47 } 48 }

關於文件保存/關閉時報錯:文件正由另一進程使用,因此該進程無法訪問此文件。