2008-10-27 74 views
1

這是故事。我正在做一個程序,每當程序關閉時,用戶創建的所有數據(文件鏈接)都會丟失,所以無論何時用戶重新打開程序,他都必須重新開始所有的工作。如何將數據行寫入xml文件

所以我決定使用一個xml文件來存儲數據,因爲dbms需要很長的時間才能加載,而處理純文本文件的代碼很難維護。

數據主要由鏈接組成,這些鏈接存儲兩個文件路徑,一個用於原點,另一個用於目標,一個布爾值表示程序關閉之前鏈接的狀態以及其他一些不太重要的事情。

當程序加載數據時應該讀取恢復應用程序的先前狀態。

所以我做了一個XML文件是這樣的:

... 
    <Directories> 
    <Directory id="0"> 
     <FilePath>C:\Test1</FilePath> 
     <PathSeparator>\</PathSeparator> 
    </Directory> 
... 

並用一個DataSet獲取數據。

Directory getDirectory() 
{ 
    ds = new DataSet(); 
       ds.ReadXml(xmlPath); 
    DataRow[] myRow = ds.Tables["Directory"]. 
       Select("id ="+id.ToString());// "id = id" 
    string temp = myRow[0]["FilePath"].ToString(); 
    Directory result = new Directory(); 
    result.path = temp; 
    temp = myRow[0]["PathSeparator"].ToString(); 
    result.pathSeparator = temp[0]; 
    return result; 
} 

所有我想新的「行」添加到XML是工作得很好,但後來:

public static int addDirectory(DataSet ds, char pathSeparator, string path) 
{ 
    DataRow myRow = ds.Tables["Directory"].NewRow(); 
    myRow.ItemArray[0] = 8; 
    myRow.ItemArray[1] = path; 
    myRow.ItemArray[2] = pathSeparator.ToString(); 
    myRow.ItemArray[3] = "lol"; 
    ds.Tables["Directory"].Rows.Add(myRow); 
    ds.AcceptChanges(); 
    ds.WriteXml(ApplicationDataManager.xmlPath); 
    return 8; 
} 

但所有這些寫是隨機發生在.XML

我在做什麼錯?順便說一下,如果任何人有任何關於我應該如何存儲這些數據的建議,我會很高興聽到(閱讀)。

在此先感謝!

[更新] 文件鏈接用於創建兩個目錄之間的連接,以便它們可以同步。

+0

「每當程序關閉時,用戶創建的所有數據(文件鏈接)都會丟失,」您應該解決這個問題,退出與XML混淆。你的意思是「用戶創建的數據丟失了」?這是重要的。 – 2008-10-27 00:08:13

+0

S.Lott,這正是我想通過'搞亂XML'來解決的,該程序沒有義務存儲之前的會話狀態,包括所有鏈接。儘管通過不存儲鏈接,用戶需要重新創建他之前完成的所有鏈接。 – Diones 2008-10-27 00:36:38

回答

3

如果LINQ在您的工具箱中,我強烈建議使用它來讀/寫XML而不是DataTable。它更加流暢直觀,您可以控制節點的位置......無論您將它們添加到集合中的哪個位置,它們都出現在生成的XML中。

下面是一個簡單的介紹,如果你搜索了一下關於它在網絡上有一噸的信息在那裏: http://www.hookedonlinq.com/LINQtoXML5MinuteOverview.ashx

0

如果你想快速和骯髒的方法是加載用戶最好的選擇信息添加到數據集中,調用「WriteXml」方法保存並使用「ReadXml」將其拉回.DataSet使用的XML格式將以相同的格式進出。

你也有很多其他選擇,但DataSet是最快捷和最骯髒的方式。