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;