UWP-如何完全删除本地设置中写入的所有数据?

UWP-如何完全删除本地设置中写入的所有数据?,uwp,application-data,Uwp,Application Data,我正在开发UWP应用程序,需要将数据存储为设置 我使用ApplicationData.Current.LocalSettings并在其中混合存储简单数据和复合数据。当我的应用程序用户想要结束其会话时,我希望删除之前存储的所有数据。我使用了ApplicationData.Current.ClearAsync(),ApplicationData.Current.LocalSettings.Values.Clear(),它似乎可以工作,但当我检查存储这些设置的settings.dat文件时,我看到数据

我正在开发UWP应用程序,需要将数据存储为设置

我使用
ApplicationData.Current.LocalSettings
并在其中混合存储简单数据和复合数据。当我的应用程序用户想要结束其会话时,我希望删除之前存储的所有数据。我使用了
ApplicationData.Current.ClearAsync()
ApplicationData.Current.LocalSettings.Values.Clear()
,它似乎可以工作,但当我检查存储这些设置的settings.dat文件时,我看到数据仍然存在,只有它们与键的连接被清除,使它们不可用

问题在于版本之间存在差异。在某些情况下,我需要更改某些密钥,甚至停止使用其中的一些密钥。对于我描述的此问题,与以前密钥相关的数据将保留在settings.dat中,并且文件大小会随时间而增长


我需要一个解决方案来完全清除settings.dat内容(或至少是我在其中写入的内容)。

您没有在此处清除本地设置。ApplicationDataContainer.Values返回PropertySet,Clear方法对应于集合类。因此,它只清除您获得的集合,而不清除设置。必须使用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;
将设置添加到容器:

var LocalSettingsContainer = ApplicationData.Current.LocalSettings;
var container = LocalSettingsContainer.CreateContainer("ContainerName", ApplicationDataCreateDisposition.Always);
container.Values[Key] = Value;
删除容器:

LocalSettingsContainer.DeleteContainer("containerName");
PS:请注意,如果容器中有任何子容器,您将要删除指定容器中的两个设置以及子容器,这些设置将被删除。 有关localsettings的更多信息,请参阅

编辑:您可以通过强制转换ApplicationDataContainer.值来获取ApplicationDataContainer中的键,通过该值,您可以单独删除设置

var containerSettings = (ApplicationDataContainerSettings)ApplicationData.Current.LocalSettings.Values;
var keys = containerSettings.Keys;

关于清除函数,你是对的。我更正了。以前的键和值呢?它们还留在档案里吗?正如我从多个测试中看到的,似乎新的设置被附加到了文件中,所以以前的设置将保留(我需要指出的是,我没有对以前的设置使用任何
ApplicationDataContainer
)。您必须使用Remove方法删除特定设置。如果您没有使用任何容器存储设置,则必须使用Remove方法显式删除每个设置。实际上,我在测试项目中尝试了
Remove()
函数。但正如我提到的,实际值将保留在文件中。但是,我不知道用户设备中使用了哪些键来在
Remove()
函数中使用它们(因为它们有一个基于用户信息的变化部分),但似乎没有其他解决方案可用于此。