这是故事。我正在做一个程序,每次程序关闭时,用户创建的所有数据(文件链接)都会丢失,所以每当用户重新打开程序时,他都必须再次完成所有工作。
所以我决定使用xml文件来存储数据,因为dbms加载时间太长而处理纯文本文件的代码很难维护。
数据主要由存储两个文件路径的链接组成,一个用于原点,一个用于目标,一个布尔值表示程序关闭前链接的状态,还有一些不太重要的东西。 / p>
当程序加载时,应该读取数据,恢复应用程序的先前状态。
所以我制作了一个像这样的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 :(得分:3)
如果LINQ在您的工具箱中,我强烈建议使用它来读取/写入xml而不是DataTable。它更流畅,更直观,您可以控制节点的位置...无论您将它们添加到集合中的哪个位置,它们都会出现在生成的XML中。
这是一个快速介绍,如果您搜索一下,网上有大量关于它的信息: http://www.hookedonlinq.com/LINQtoXML5MinuteOverview.ashx
答案 1 :(得分:0)
如果你想快速而肮脏的方法,最好的选择是将用户信息加载到数据集中,调用“WriteXml”方法保存并使用“ReadXml”将其拉回来.DataSet使用的XML格式它本身将以相同的格式进出。
您还有许多其他选项,但DataSet是最快速和最脏的方法。