關於文件保存/關閉時報錯:文件正由另一進程使用,因此該進程無法訪問此文件。
阿新 • • 發佈:2017-08-02
讀取 顯示 對象 必須 文件 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 publicXmlNodeList 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 }
關於文件保存/關閉時報錯:文件正由另一進程使用,因此該進程無法訪問此文件。