Заголовок говорит, что все это действительно так. Я застрял на этом в течение нескольких дней и был бы рад помочь. У меня есть главная страница и страница настроек, когда главная страница загружается с первого раза, когда она проверяет файл settings.xml в локальной папке и копирует ее, если не найден. Затем, когда пользователь открывает страницу настроек, он должен загружать данные из локальной папки, позволяя пользователю редактировать, прежде чем сохранять их обратно в локальную папку из события OnNavigatedFrom.Как загрузить, отредактировать и сохранить xml в приложении uwp
кода для загрузки из папки установки в локальную папку
// Has the file been copied already?
bool blFileExist = false;
try
{
await ApplicationData.Current.LocalFolder.GetFileAsync("settings.xml");
// No exception means it exists
blFileExist = true;
btnSettings.Foreground = new SolidColorBrush(Windows.UI.Colors.White);
}
catch (System.IO.FileNotFoundException)
{
// The file obviously doesn't exist
blFileExist = false;
btnSettings.Foreground = new SolidColorBrush(Windows.UI.Colors.Red);
}
catch (Exception)
{
}
if (!blFileExist)
{
try
{
// Cant await inside catch, but this works anyway
StorageFile stopfile = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync("settings.xml");
await stopfile.CopyAsync(ApplicationData.Current.LocalFolder);
}
catch (System.IO.FileNotFoundException)
{
}
catch (Exception)
{
}
}
кода для загрузки и сохранения страницы настроек
private void loadSettings()
{
try
{
doc = XElement.Load("settings.xml");
nAIPlayers = int.Parse(doc.Element("ai_players").Value);
strCardBack = doc.Element("back").Value;
comboBoxAIPlayers.SelectedIndex = nAIPlayers - 1;
}
catch (System.IO.FileNotFoundException)
{
}
catch (Exception ex)
{
}
}
private async void saveSettings()
{
//try
//{
StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync("settings.xml");
using (Stream fileStream = await file.OpenStreamForWriteAsync())
{
doc.SetElementValue("ai_players", nAIPlayers);
doc.SetElementValue("back", "Back_0");
doc.Save(fileStream);
}
/*}
catch (System.IO.FileNotFoundException)
{
}
catch (Exception ex)
{
}*/
}
Я думаю, что проблема я получить доступ к локальному файлу, чтобы сохранить его и файл установки для его загрузки. Результат - независимо от того, что я сохраняю, он всегда читает значения в исходных настройках. Xml
Как загрузить это из локальной папки?
doc = XElement.Load ("settings.xml");
Update
На первой итерации код прекрасно работает и код страницы настройки открывается, как это должно быть. Это только после выхода из страницы настроек и запуска метода saveSettings(), который он терпит неудачу, и выдает ошибку при перезагрузке страницы настроек и запуске loadSettings().
System.Xml.XmlException: данные на корневом уровне недействительны. Строка 5, позиция 12
Спасибо. Я так много обновил. – luigivampa
@luigivampa Похоже, вы пишете неправильный файл XML, поэтому данные неверны. Лучшее - просто отлаживайте его, сохраняйте/копируйте этот файл в KnownFolder, чтобы посмотреть, как он выглядит, или [используйте ISE] (http://stackoverflow.com/a/33063501/2681948) - каким-то образом откройте файл и посмотрите, что не так , – Romasz