【发布时间】:2008-10-27 00:04:23
【问题描述】:
这就是故事。我在做一个程序,每次关闭程序时,用户创建的所有数据(文件链接)都会丢失,所以每当用户重新打开程序时,他确实必须重新完成所有工作。
所以我决定使用 xml 文件来存储数据,因为加载 dbms 需要很长时间,而且处理纯文本文件的代码很难维护。
数据主要由 Links 组成,其中存储了两个文件路径,一个为源,一个为目标,一个布尔值表示程序关闭前的链接状态,以及其他一些不太重要的东西。
当程序加载时,应读取数据以恢复应用程序的先前状态。
所以我做了一个这样的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 上的一个随机位置
我做错了什么?
顺便说一句,如果有人对我应该如何存储这些数据有任何建议,我会很高兴听到(阅读)。
提前致谢!
[更新] 文件链接用于在两个目录之间建立连接,因此它们可以同步。
【问题讨论】:
-
"每次关闭程序时,用户创建的所有数据(文件链接)都会丢失," 你应该解决这个问题,不要再乱用 XML。您是什么意思“用户创建的数据丢失”?这才是最重要的。
-
S.Lott,这正是我试图通过“弄乱 XML”来解决的问题,程序没有义务存储以前的会话状态,包括所有链接。尽管通过不存储链接,用户需要重新创建他之前创建的所有链接。
-
还是通过在线数据库或网络服务远程存储?
-
你不应该添加行,你应该编写一个全新的数据集。
-
@Diones:“用户创建的数据丢失”是什么意思?