![](/img/trans.png)
[英]“The process cannot access the file because it is being used by another process” with Images
[英]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.