2008-10-27 46 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是最快捷和最肮脏的方式。