簡體   English   中英

該進程無法訪問'xml'文件,因為它正由另一個進程使用

[英]The process cannot access the 'xml' file because it is being used by another process

我想更新一個文件。 我打開文件,然后嘗試將內容寫入其中,但得到了異常:

該進程無法訪問該文件,因為該文件正由另一個進程使用。

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;

XmlWriter writer = XmlWriter.Create("../../../connString.xml", settings);
writer.WriteStartDocument();
writer.WriteComment("This file is generated by the program.");
writer.WriteStartElement("ConnectionString");

if (ConnType == "SQL Server") {
   writer.WriteAttributeString("ID", "SQL Server");
   writer.WriteAttributeString("DataSource", Convert.ToString(TEServer.EditValue));
   writer.WriteAttributeString("Database", Convert.ToString(TEDatabase.EditValue));
   writer.WriteAttributeString("UserID", Convert.ToString(TEUserID.EditValue));
   writer.WriteAttributeString("Password", Convert.ToString(TEPassword.EditValue));
} else if (ConnType == "Access") {
   writer.WriteAttributeString("ID", "Access");
   writer.WriteAttributeString("DbLocation", Convert.ToString(BtnEditDBLoc.EditValue));
}

writer.WriteEndElement();
writer.WriteEndDocument();

writer.Flush();
writer.Close();

我一直在看一些消息來源說是接近“XmlWriter”,但在我的編碼中我已經關閉了,有:writer.Close();

但仍然會出現相同的錯誤。

請問有什么可以幫助我的嗎?

謝謝。

任何編寫器(XmlWriter,FileWriter等)都應該包含在一個使用塊中,以便正確處理它們:

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.CloseOutput = true; 

using (XmlWriter writer = XmlWriter.Create("../../../connString.xml", settings)) {
   writer.WriteStartDocument();
   writer.WriteComment("This file is generated by the program.");
   writer.WriteStartElement("ConnectionString");

   if (ConnType == "SQL Server") {
      writer.WriteAttributeString("ID", "SQL Server");
      writer.WriteAttributeString("DataSource", Convert.ToString(TEServer.EditValue));
      writer.WriteAttributeString("Database", Convert.ToString(TEDatabase.EditValue));
      writer.WriteAttributeString("UserID", Convert.ToString(TEUserID.EditValue));
      writer.WriteAttributeString("Password", Convert.ToString(TEPassword.EditValue));
   } else if (ConnType == "Access") {
      writer.WriteAttributeString("ID", "Access");
      writer.WriteAttributeString("DbLocation", Convert.ToString(BtnEditDBLoc.EditValue));
   }

   writer.WriteEndElement();
   writer.WriteEndDocument();

   //writer.Flush(); //Flush isn't required--handled by the using block
   //writer.Close(); //close isn't required--handled by the using block
}

我還添加了settings.CloseOutput = true; 根據這個SO答案可能是必要的

使用塊來訪問系統中的任何文件,因為訪問任何文件都會在我們的系統中創建一個進程,因此neva允許兩個線程訪問同一個文件。 因此,為了關閉或退出該過程,alws在C#中使用塊,使用塊alws釋放你在項目中使用的資源

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM