这真的很奇怪。我正在编写一个编写 XML 文件的应用程序。但是,在某些情况下,不会创建/覆盖该文件。
我设法追踪导致它无法写入所需的特定事件,并将其分离成一个独立的程序:
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 为真。在它写入 XML 之前,它会显示一个用于打开文件的对话框。如果您使用此对话框选择文件(任何文件;不是“Trivial.xml”),之后的 XML 保存将失败。默默。如果您在 OpenFileDialog 中点击取消,保存将正常工作。
所以这里的文件句柄可能存在一些问题,但解决方法是什么?您会看到强制 Dispose 的 OpenFileDialog 没有帮助。