這真的很奇怪。我正在編寫一個寫入XML文件的應用程序。但在某些情況下,文件不會被創建/覆蓋。XmlDocument在OpenFileDialog之後不起作用
我設法追查到導致失敗寫所需的特定事件和我分離出來成爲一個獨立的程序:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
bool doFileOpenFirst = false;
if (doFileOpenFirst)
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.CheckFileExists = true;
dialog.Filter = "Image files|*.bmp;*.jpg;*.png";
dialog.ShowDialog();
}
// Just write a trivial XML file
XmlDocument doc = new XmlDocument();
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
doc.AppendChild(dec);// Create the root element
XmlElement root = doc.CreateElement("Database");
doc.AppendChild(root);
doc.Save("Trivial.xml");
}
}
現在,如果你運行它,你會看到它開始工作。 現在讓doFileOpenFirst爲true。在寫入XML之前,它會顯示一個打開文件的對話框。 如果使用此對話框選擇文件(任何文件; 而不是「Trivial.xml」),則以後的XML保存將失敗。默默。 如果您在OpenFileDialog中點擊取消,保存將正常工作。
所以在這裏可能存在一些文件句柄的問題,但是解決方法是什麼?你會看到強制Dispose of OpenFileDialog不起作用。
OK,但這個例子只是快速完成,藉以說明問題。在真實代碼中,OpenFileDialog和XmlDocument.Save都是由用戶手動觸發的,並且在初始化或加載後很長時間纔會發生。 – Mijin