UWP - 如何完全删除 LocalSettings 中写入的所有数据?
Posted
技术标签:
【中文标题】UWP - 如何完全删除 LocalSettings 中写入的所有数据?【英文标题】:UWP - How completely delete all data written in LocalSettings? 【发布时间】:2017-09-12 12:46:09 【问题描述】:我正在开发 UWP 应用,我需要将数据存储为设置。
我使用ApplicationData.Current.LocalSettings
,并在其中存储了简单数据和复合数据的混合。当我的应用用户想要结束其会话时,我希望删除之前存储的所有数据。我使用了ApplicationData.Current.ClearAsync()
、ApplicationData.Current.LocalSettings.Values.Clear()
,它似乎可以工作,但是当我检查存储这些设置的 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:请注意,如果容器中有任何子容器,您将要删除指定容器中的设置以及子容器将被删除。 有关 localsettings 的更多信息,请参阅documentation.
编辑:您可以通过将 ApplicationDataContainer.Values 强制转换为 ApplicationDataContainerSettings 来获取 ApplicationDataContainer 中的键,ApplicationDataContainerSettings 具有 Keys 属性,您可以通过该属性单独删除设置。
var containerSettings = (ApplicationDataContainerSettings)ApplicationData.Current.LocalSettings.Values;
var keys = containerSettings.Keys;
【讨论】:
Clear 功能是对的。我更正了。 以前的键和值呢?它们是否保留在文件中?正如我从多个测试中看到的那样,似乎新的设置被附加到文件中,所以以前的设置将保留(我需要提到我没有使用任何ApplicationDataContainer
来进行以前的设置)。
您必须使用 Remove 方法删除特定设置。
如果您没有使用任何容器来存储您的设置,那么您必须使用 Remove 方法明确删除每个设置
其实我在我的测试项目中尝试过Remove()
函数。但正如我提到的,实际值将保留在文件中。但是,我不知道用户设备中使用了哪些键以在Remove()
功能中使用它们(因为它们有一个基于用户信息的更改部分),但似乎没有其他解决方案可用。以上是关于UWP - 如何完全删除 LocalSettings 中写入的所有数据?的主要内容,如果未能解决你的问题,请参考以下文章