我一直致力于一个将配置加载到XML文件并将其写入XML文件的应用程序。我知道有一些关于这样做的意见,但我一直遇到这个代码的问题。
private static void AddToXmlTemplate(Template tmp, string _config)
{
string configFile = _config + "configuredTemplate.xml";
FileStream fs = new FileStream(configFile, FileMode.OpenOrCreate);
if (File.Exists(configFile)) {
XDocument xD = new XDocument();
xD.Add(new XElement("Store",
new XElement("template",
new XElement("filePath", tmp.TempPath),
new XElement("Name", tmp.TempName),
new XElement("description", tmp.TempDesc))));
xD.Save(fs);
fs.Flush();
fs.Dispose();
//commenting for change to allow sync.
}
else
{
/********------ appends the template to the config file.------*************/
XDocument xD = XDocument.Load(fs);
XElement root = xD.Element("Store");
IEnumerable<XElement> rows = root.Descendants("template");
XElement last = rows.Last();
last.AddAfterSelf(
new XElement("template"),
new XElement("filePath", tmp.TempPath),
new XElement("Name", tmp.TempName),
new XElement("description", tmp.TempDesc));
xD.Save(fs);
fs.Flush();
fs.Dispose();
}
}
这个整个函数在另一个函数的foreach循环中调用,所有函数都应检查文件夹中是否有配置文件,检查html文件,询问用户有关文件的信息,然后保存到XML文件。
我认为我需要将Filestream操作以及可能的XDocument移动到调用函数,并将它们传递给此函数。
最大的问题是它只保存最后一组节点。
答案 0 :(得分:0)
我认为问题出在if (!File.Exists(configFile))
上。你可以试试这个:
private static void AddToXmlTemplate(Template tmp, string _config)
{
string configFile = Path.Combine(_config, "configuredTemplate.xml");
using (FileStream fs = new FileStream(configFile, FileMode.OpenOrCreate))
{
if (!File.Exists(configFile))
{
XElement xD = new XElement("Store",
new XElement("template"),
new XElement("filePath", tmp.TempPath),
new XElement("Name", tmp.TempName),
new XElement("description", tmp.TempDesc));
xD.Save(fs);
fs.Flush();
}
else
{
XDocument xD = XDocument.Load(fs);
XElement root = xD.Element("Store");
IEnumerable<XElement> rows = root.Descendants("template");
XElement last = rows.Last();
last.AddAfterSelf(
new XElement("template"),
new XElement("filePath", tmp.TempPath),
new XElement("Name", tmp.TempName),
new XElement("description", tmp.TempDesc));
xD.Save(fs);
fs.Flush();
}
}
}
答案 1 :(得分:0)
你的if语句上的逻辑肯定是错误的吗?
目前,如果该文件存在,那么您正在创建一个新的xml文件,如果没有,则需要附加它,它需要反过来。
如果你把它改成它应该可以工作
if (!File.Exists(configFile)) {
答案 2 :(得分:0)
啊我认为它是因为你首先创建文件流然后检查它是否存在,所以它将永远存在。如果将其更改为
findWhere()