2012-10-07 419 views
0

這真的很奇怪。我正在編寫一個寫入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不起作用。

回答

1

我想你應該放置這些代碼,打開對話框並將xml保存到Form的Load事件中。

+0

OK,但這個例子只是快速完成,藉以說明問題。在真實代碼中,OpenFileDialog和XmlDocument.Save都是由用戶手動觸發的,並且在初始化或加載後很長時間纔會發生。 – Mijin

1

你的對話框(OpenFileDialog)和你的XML保存代碼是相互獨立的。因此,顯示對話框不會導致XML保存問題,特別是在對話框中選擇其他文件時。

此外,爲了幫助您,我已經檢查過您的代碼和步驟,XML和XML仍然可以保存,無論有沒有OpenFileDialog。所以假設你的問題不是來自打開的文件對話框。在你提供的樣本中沒有問題。

+0

與cacoroto一樣的迴應:代碼一直失敗,但我被鎖定到舊的框架(2.0),因爲我在朋友的筆記本電腦上。如果它對你有用,那麼這一定是原因。感謝您爲我嘗試代碼。 – Mijin

1

似乎工作正常!我嘗試和按照應有的工作。

沒有問題打開一個隨機的圖像文件:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Xml; 

namespace StackOverflow 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     bool doFileOpenFirst = true; 

     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"); 
    } 
} 
} 
+0

再次運行它仍然不適合我。但我正在寫一箇舊筆記本電腦,它是VS2005(因此.NET 2.0)。讓它在你的機器上工作cacoroto prob意味着這是已經修復的東西。謝謝(對不起,如果浪費任何人的時間)。 – Mijin

相關問題