應用安裝時系統自動建立專屬資料存放區,開發者無需關心實體路徑,透過 Windows.Storage.ApplicationData.Current 存取三大容器:
var localSettings = ApplicationData.Current.LocalSettings; localSettings.Values["exampleSetting"] = "Hello Windows";
var composite = new ApplicationDataCompositeValue(); composite["intVal"] = 1; composite["strVal"] = "string"; localSettings.Values["exampleCompositeSetting"] = composite;
var container = localSettings.CreateContainer("exampleContainer", ApplicationDataCreateDisposition.Always);
if (localSettings.Containers.ContainsKey("exampleContainer"))
localSettings.Containers["exampleContainer"].Values["exampleSetting"] = "Hello Windows";
// 讀取簡單值
object value = localSettings.Values["exampleSetting"];
// 讀取複合值
var composite = (ApplicationDataCompositeValue)localSettings.Values["exampleCompositeSetting"];
// 讀取容器內值
bool hasContainer = localSettings.Containers.ContainsKey("exampleContainer");
bool hasSetting = hasContainer && localSettings.Containers["exampleContainer"].Values.ContainsKey("exampleSetting");
// 刪除
localSettings.Values.Remove("exampleSetting");
localSettings.Values.Remove("exampleCompositeSetting");
localSettings.DeleteContainer("exampleContainer");
async void WriteTimestamp()
{
var formatter = new DateTimeFormatter("longtime");
var file = await localFolder.CreateFileAsync("dataFile.txt", CreationCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(file, formatter.Format(DateTime.Now));
}
async void ReadTimestamp()
{
try
{
var file = await localFolder.GetFileAsync("dataFile.txt");
string timestamp = await FileIO.ReadTextAsync(file);
}
catch { /* 檔案不存在 */ }
}
CreationCollisionOption:ReplaceExisting、FailIfExists、GenerateUniqueName、OpenIfExists。ApplicationDataCreateDisposition:Always (不存在則建立)、Existing (必須存在)。MSDN 提供 Application data sample 完整專案下載。
掌握 ApplicationData 三大容器與 FileIO 非同步 API,即可實作離線快取、使用者偏好同步、暫存清理等核心資料持久化需求。注意漫遊資料配額限制 (預設 100KB),大型資料請使用 LocalFolder。