由于 UWP c# 中的硬重启,XML 文件损坏



在我的代码中,有一个XML文件,我用它来以不同的方法从中获取信息(变量(,但是当出现路灯问题(我无法控制的东西(使我的设备硬重启XML文件损坏时,我正在尝试这样做,但它**在此行中抛出异常

using (fsFileStream = 
        new FileStream( musicLibraryPath...

帮助将不胜感激。我将代码留在下面:

public async void fileExist(string fileName)
{
        
 try
{
    //Creates "file.xml".
    StorageFile newBlankDocument =
                await KnownFolders.MusicLibrary.CreateFileAsync(blankFile, CreationCollisionOption.FailIfExists);
}
catch (Exception)
{
   
}
try
{
    //Creates "configFile.xml".
    StorageFile newDocument = 
        await KnownFolders.MusicLibrary.CreateFileAsync(fileName, CreationCollisionOption.FailIfExists);
    //Gets the file
    StorageFile fileDocument = 
        await KnownFolders.MusicLibrary.GetFileAsync(fileName);
    var musicLibrary = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Music);
    String musicLibraryPath = musicLibrary.SaveFolder.Path;
    using (fsFileStream = 
        new FileStream( musicLibraryPath, FileMode.CreateNew, FileAccess.Write, FileShare.None, 1024, FileOptions.WriteThrough))
    {
        XmlWriterSettings settings = new XmlWriterSettings();
        settings.Indent = true;
        settings.OmitXmlDeclaration = false;
        using (XmlWriter writer = XmlWriter.Create(fsFileStream, settings))
        {
            //Create all the XML document fields.
            writer.WriteStartDocument();
            writer.WriteStartElement("Config");
            writer.WriteStartElement("General");
            writer.WriteAttributeString("name", "DATA");
            writer.WriteStartElement("Local");
            writer.WriteElementString("something1", "");
            writer.WriteElementString("something2", "");
            writer.WriteElementString("something3", "");
            writer.WriteEndElement();
            writer.WriteEndDocument();
            writer.Flush();
            writer.Dispose();
            showReferenceWarning();
            timerReferenceWarning.Start();
        }
    }
}
catch (Exception)
{
    //The file already exists and doesn't need to be created again.
}
}

但它在此行中抛出一个异常" 使用 (fsFileStream = new FileStream( musicLibraryPath...">

Windows 应用商店应用以沙盒方式运行,对文件系统的访问权限非常有限。在大多数情况下,他们只能直接访问其安装文件夹和应用程序数据文件夹。不能直接使用该Path。如果要将数据写入 xml 文件,可以await fileDocument.OpenAsync(FileAccessMode.ReadWrite) .

public async void fileExist(string fileName)
{
    try
    {
        //Creates "file.xml".
        StorageFile newBlankDocument = await KnownFolders.MusicLibrary.CreateFileAsync("file.xml", CreationCollisionOption.FailIfExists);
    }
    catch (Exception)
    {
    }
    try
    {
        //Creates "configFile.xml".
        StorageFile newDocument = await KnownFolders.MusicLibrary.CreateFileAsync(fileName, CreationCollisionOption.FailIfExists);
        //Gets the file
        StorageFile fileDocument = await KnownFolders.MusicLibrary.GetFileAsync(fileName);
        await Task.Run(async () =>
        {
            using (var fsFileStream = await fileDocument.OpenAsync(FileAccessMode.ReadWrite))
            {
                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Indent = true;
                settings.OmitXmlDeclaration = false;
                using (XmlWriter writer = XmlWriter.Create(fsFileStream.AsStreamForWrite(), settings))
                {
                    //Create all the XML document fields.
                    writer.WriteStartDocument();
                    writer.WriteStartElement("Config");
                    writer.WriteStartElement("General");
                    writer.WriteAttributeString("name", "DATA");
                    writer.WriteStartElement("Local");
                    writer.WriteElementString("something1", "");
                    writer.WriteElementString("something2", "");
                    writer.WriteElementString("something3", "");
                    writer.WriteEndElement();
                    writer.WriteEndDocument();
                    writer.Flush();
                    writer.Dispose();
                }
            }
        });
    }
    catch (Exception ex)
    {            
        //The file already exist and doesn´t need to be created again.
    }
}

请注意,如果您使用过音乐库,则需要在应用清单中声明功能。有关更多信息,您可以参考功能。