UWP的 LocalSettings简介

发布时间 2023-05-26 16:05:36作者: Jeffxue

UWP程序的AppData一般位于 C:\Users\<UserName>\AppData\Local\Packages\<PackageFamilyName>目录下,该目录包含如下内容

常用的两个目录为:LocalStateSettings,其中LocalState主要用来存储本地的文件如Log等内容。Settings目录下的settings.dat则对应于ApplicationDataContainer,即Windows.Storage.ApplicationData.Current.LocalSettings

ApplicationDataContainer作为数据容器,它的层级结构和文件目录类似,其中可以直接包含Key-Value,也可以嵌套的包含子容器ApplicationDataContainer
其主要API及用法总结如下:

1. 直接存储 Key-Value 在 ApplicationData.Current.LocalSettings的容器中(根容器)

直接在LocalSettings上操作Key-Vlaue,此时所有的值都在 localSettings.Values

ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings;

// 1.写入:若不存在则直接创建并写入,若存在则直接覆盖
localSettings.Values["key01"] = "val01";

// 读取:根据key值来读取对应的value值,需要注意若无对应的值,可能会抛异常
// 2-1. 先判断是否存在该key-value,若存在再去读取。
if (!localSettings.Values.ContainsKey("key02"))
{
    string val02 = localSettings.Values["key02"].ToString();
}

// 2-2. 使用TryGetValue 避免不存在时抛异常,若不存在则 bRes=false
object val03;
bool bRes = localSettings.Values.TryGetValue("key03", out val03);

// 3. 删除指定的 key-value(需先判断是否存在)
localSettings.Values.Remove("key01");

// 4. 清除该容器中所有的数据
localSettings.Values.Clear();

2. 子容器中操作数据

首先获取根数据容器ApplicationData.Current.LocalSettings,可以在根数据容器上创建和删除对应的子容器。如下的代码中 localSettings.Containers["myContainer"]subLocalSettings表示新创建的同一个子容器。

// 获取根数据容器,根容器无法删除
ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings;

// 创建子容器:若已存在则直接返回子容器,若不存在则直接创建对应的子容器
ApplicationDataContainer subLocalSettings = localSettings.CreateContainer("myContainer", ApplicationDataCreateDisposition.Always);

// 可以通过 localSettings 和 subLocalSettings来操作该子容器
if (localSettings.Containers.ContainsKey("myContainer"))
{
    localSettings.Containers["myContainer"].Values["subKey01"] = "subVal01";
    subLocalSettings.Values["subKey02"] = "subVal02";
}

if(subLocalSettings.Values.ContainsKey("subKey01"))
{
    string v01 = subLocalSettings.Values["subKey01"].ToString();
}

// 删除指定的容器
localSettings.DeleteContainer("myContainer");


【参考资料】

  1. ApplicationData.LocalSettings
  2. ApplicationDataContainer