UWP - Как полностью удалить все данные, записанные в LocalSettings?

Я работаю над приложением UWP, и мне нужно сохранить данные в качестве настройки.

я использую ApplicationData.Current.LocalSettings и я храню смесь простых данных и составных данных в нем. Когда пользователь моего приложения хочет завершить сеанс, я хочу, чтобы все данные, которые я хранил ранее, были удалены. я использовал ApplicationData.Current.ClearAsync(), ApplicationData.Current.LocalSettings.Values.Clear() и кажется, что это работает, но когда я проверяю файл settings.dat, в котором хранятся эти настройки, я вижу, что данные все еще там, и только их соединение с их ключами очищается и делает их недоступными.

Проблема заключается в том, что от версии к версии возникают ситуации, в которых мне нужно изменить некоторые ключи или даже прекратить использовать некоторые из них, и с этой проблемой, которую я описал, данные, относящиеся к предыдущим ключам, останутся в файле settings.dat, а размер файла со временем увеличивается,

Мне нужно решение, позволяющее полностью очистить содержимое settings.dat (или, по крайней мере, содержимое, которое я в нем написал).

1 ответ

Решение

Вы не очищаете локальные настройки здесь. ApplicationDataContainer.Values ​​возвращает PropertySet, а метод Clear соответствует классу Collection. Таким образом, он очищает только полученную коллекцию, а не настройки. Вы должны использовать метод Remove, чтобы индивидуально удалить настройку на основе ключа, или использовать ApplicationDataContainer для хранения ваших настроек. Вы можете удалить все настройки, хранящиеся в контейнере, за один раз. Удалить настройку по отдельности по ее ключу:

ApplicationData.Current.LocalSettings.Values.Remove("key");

Создать ApplicationDataContainer:

var LocalSettingsContainer = ApplicationData.Current.LocalSettings;
var container = LocalSettingsContainer.CreateContainer("ContainerName", ApplicationDataCreateDisposition.Always);

Добавить настройки в контейнер:

container.Values[Key] = Value;

Удалить контейнер:

LocalSettingsContainer.DeleteContainer("containerName");

PS: Обратите внимание, что если у вас есть какие-либо вложенные контейнеры в контейнере, вы собираетесь удалить обе настройки в указанном контейнере, а также вложенные контейнеры будут удалены. Подробнее о локальных настройках можно узнать из документации.

Редактировать: ключи можно получить в ApplicationDataContainer, приведя ApplicationDataContainer.Values ​​к ApplicationDataContainerSettings, у которого есть свойство Keys, с помощью которого можно отдельно удалить параметр.

var containerSettings = (ApplicationDataContainerSettings)ApplicationData.Current.LocalSettings.Values;
var keys = containerSettings.Keys;
Другие вопросы по тегам