XMLファイルに設定をロードして書き込むアプリケーションで作業していました。私はこのことについていくつかの意見があることを知っていますが、私はこのコードに問題があります。XMLファイルを保存すると1つのエントリしか保存されていないようです
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を呼び出し関数に移し、それをこの関数に渡す必要があると考えています。
大きな問題は、ノードの最後のセットだけを保存することです。
これがどのように動作するかはわかりますが、変更を加えるとelseブロックのみが実行されます。 –
@ChrisRutherfordおそらく、problesがファイルパスを持っています。文字列configFile = Path.Combine(_config、 "configuredTemplate.xml") – daniell89