异步 XML 写入正在清除文件

Async XML write is clearing file

我正在开发一个 class 来创建或打开一个 xml 文件:

namespace QTabs
{
    public class DataLayer
    {
        XmlDocument XMLDocObject = new XmlDocument();
        StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
        StorageFile storageFile;
        string xmlFile = "DataStore.xml";
        public DataLayer()
        {
            loadXML();
        }

        public async void loadXML()
        {
            //if XML doc doesnt exist create it
            try
            {
                storageFile = await ApplicationData.Current.LocalFolder.GetFileAsync(xmlFile);
            }
            catch (FileNotFoundException)
            {
                storageFile = null;
            }
            if (storageFile == null)
            {

                storageFile = await storageFolder.CreateFileAsync(xmlFile);
                // Manipulate the xml document.
                var root = XMLDocObject.CreateElement("SyncTimes");
                XMLDocObject.AppendChild(root);
                var childTag1 = XMLDocObject.CreateElement("id");
                var childTag2 = XMLDocObject.CreateElement("dateTime");
                root.AppendChild(childTag1);
                root.AppendChild(childTag2);
                await XMLDocObject.SaveToFileAsync(storageFile);
            }
            else
            {
                storageFile = await storageFolder.GetFileAsync(xmlFile);
            }
        }
        public async void addSyncTime()
        {
            XmlElement x1 = XMLDocObject.CreateElement("SyncTime");
            XmlElement x11 = XMLDocObject.CreateElement("id");
            x11.InnerText = "1";
            x1.AppendChild(x11);
            XmlElement x12 = XMLDocObject.CreateElement("dateTime");
            x12.InnerText = DateTime.Now.ToString();
            x1.AppendChild(x12);
            await XMLDocObject.SaveToFileAsync(storageFile);
        }
    }
}

我的问题与上述 addSyncTime() 方法有关。当它运行时,它会导致 XML 文件为空,包括删除创建时添加的元素。

我做错了什么?

很难说没有 a good, minimal, complete code example 能可靠地重现问题。但是,您的代码似乎有两个不同的问题:

  1. 当 XML 文件已经存在时,您根本不需要实际 加载 它,留下 XMLDocObject 引用一个空文档。 (事实上​​ , storageFile != null 案例似乎完全不合适;它不仅没有像我期望的那样从 storageFile 加载 XML,它实际上 重新检索 storageFile 对象通过再次调用 GetFileAsync())。
  2. 您的 addSyncTime() 方法创建了新元素,但从未将它们添加到 XML 文档树中。

鉴于以上情况,我希望程序行为为:

  • 第一次 运行 程序时,会创建 XML 文档。
  • 您以后任何时候 运行 程序(除非您删除 XML 文档),尝试更新 XML 文档都会清空该文档。

在这两种情况下,我都不希望添加 new SyncTime 元素。第一次 运行 程序时,您将获得根 SyncTimes 元素及其初始 iddateTime 子元素,但没有任何 SyncTime 元素。之后,XML 文档将被清空,您仍然不会得到任何新的 SyncTime 元素。

如果以上内容未能解决您的问题,请按照我上面提供的 link 中所述提供良好的代码示例。