Ukládání a načítání nastavení a dalších dat aplikací

Důležité

Rozhraní API ApplicationData popsaná v tomto článku jsou určená pro zabalené aplikace. Nevybalené aplikace nemají přístup k úložištím dat aplikací spravovaným systémem a měly by používat alternativní mechanismy úložiště, jako je přímý vstupně-výstupní operace nebo přístup k registru.

Data aplikace jsou proměnlivá data vytvořená a spravovaná konkrétní aplikací. Zahrnuje stav modulu runtime, nastavení aplikace, uživatelské předvolby, referenční obsah (například definice slovníku v aplikaci slovníku) a další nastavení. Data aplikace se liší od uživatelských dat, data, která uživatel vytvoří a spravuje při použití aplikace. Uživatelská data zahrnují dokumenty nebo mediální soubory, přepisy e-mailu nebo komunikace nebo záznamy databáze obsahující obsah vytvořený uživatelem. Uživatelská data můžou být užitečná nebo smysluplná pro více než jednu aplikaci. Často se jedná o data, která chce uživatel manipulovat nebo přenášet jako entitu nezávislou na samotné aplikaci, jako je dokument.

Důležitá poznámka k datům aplikace: Životnost dat aplikace je svázaná s životností aplikace. Pokud se aplikace odebere, všechna data aplikace se v důsledku toho ztratí. Nepoužívejte data aplikací k ukládání uživatelských dat nebo čehokoli, co by uživatelé mohli vnímat jako cenné a nenahraditelné. Doporučujeme, aby se knihovny a Microsoft OneDrive uživatele používaly k ukládání těchto informací. Data aplikací jsou ideální pro ukládání uživatelských předvoleb, nastavení a oblíbených položek specifických pro aplikace.

Typy dat aplikací

Existují dva typy dat aplikace: nastavení a soubory.

Settings

Nastavení slouží k ukládání uživatelských předvoleb a informací o stavu aplikace. Rozhraní API pro data aplikací umožňuje snadno vytvářet a načítat nastavení (ukážeme vám některé příklady dále v tomto článku).

Tady jsou datové typy, které můžete použít pro nastavení aplikace:

  • UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single, Double
  • Booleova logika
  • Char16, Řetězec
  • DateTime, TimeSpan
  • GUID, Point, Size, Rect
  • ApplicationDataCompositeValue: Sada souvisejících nastavení aplikace, která musí být serializovaná a deserializovaná atomicky. Pomocí složených nastavení můžete snadno zpracovávat atomické aktualizace vzájemně závislých nastavení. Systém zajišťuje integritu složených nastavení během souběžného přístupu a roamingu. Složená nastavení jsou optimalizovaná pro malé objemy dat a výkon může být nízký, pokud je použijete pro velké datové sady.

Files

Soubory slouží k ukládání binárních dat nebo k umožnění vlastních, přizpůsobených serializovaných typů.

Ukládání dat aplikací v úložištích dat aplikací

Když je aplikace nainstalovaná, systém jí poskytne vlastní úložiště dat pro jednotlivé uživatele pro nastavení a soubory. Nemusíte vědět, kde a jak tato data existují, protože systém zodpovídá za správu fyzického úložiště a zajišťuje, aby byla data izolovaná od jiných aplikací a jiných uživatelů. Systém obecně zachovává obsah těchto úložišť dat, když uživatel nainstaluje aktualizaci aplikace, avšak RoamingSettings nemusí být zachována prostřednictvím aktualizací Microsoft Store (viz Cestovní data). Pro nastavení, která musí přežít aktualizace aplikace, použijte LocalSettings. Systém zcela a čistě odebere obsah těchto úložišť dat při odinstalaci aplikace.

V úložišti dat aplikace má každá aplikace systémem definované kořenové adresáře: jeden pro místní soubory, jeden pro roamingové soubory a jeden pro dočasné soubory. Aplikace může do každého z těchto kořenových adresářů přidat nové soubory a nové kontejnery.

Data místní aplikace

Data místních aplikací by se měla používat pro všechny informace, které je potřeba zachovat mezi relacemi aplikací a které nejsou vhodné pro roamingová data aplikací. Data, která se nedají použít na jiných zařízeních, by se měla uložit i tady. U místních uložených dat neexistuje žádné obecné omezení velikosti. Úložiště dat místní aplikace použijte pro data, která nedává smysl pro roaming a pro velké datové sady. Data místních aplikací spolehlivě přetrvají prostřednictvím aktualizací aplikací, což je doporučenou volbou LocalSettings pro uživatelské předvolby a stav aplikace, které musí přežít Microsoft Store aktualizace.

Načtení místního úložiště dat aplikací

Než budete moct číst nebo zapisovat data místní aplikace, musíte načíst místní úložiště dat aplikací. Pokud chcete načíst místní úložiště dat aplikace, pomocí vlastnosti ApplicationData.LocalSettings získejte místní nastavení aplikace jako objekt ApplicationDataContainer. Pomocí vlastnosti ApplicationData.LocalFolder získejte soubory v objektu StorageFolder. Pomocí ApplicationData.LocalCacheFolder vlastnost získat složku v místním úložišti dat aplikace, kde můžete ukládat soubory, které nejsou zahrnuty do zálohování a obnovení.

Windows.Storage.ApplicationDataContainer localSettings = 
    Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.StorageFolder localFolder = 
    Windows.Storage.ApplicationData.Current.LocalFolder;

Vytvoření a načtení jednoduchého místního nastavení

K vytvoření nebo zápisu nastavení použijte vlastnost ApplicationDataContainer.Values pro přístup k nastavení v kontejneru localSettings , který jsme získali v předchozím kroku. Tento příklad vytvoří nastavení s názvem exampleSetting.

// Simple setting

localSettings.Values["exampleSetting"] = "Hello Windows";

K načtení nastavení použijete stejnou vlastnost ApplicationDataContainer.Values , kterou jste použili k vytvoření nastavení. Tento příklad ukazuje, jak načíst právě vytvořené nastavení.

// Simple setting
Object value = localSettings.Values["exampleSetting"];

Vytvoření a načtení místní složené hodnoty

Pokud chcete vytvořit nebo napsat složenou hodnotu, vytvořte objekt ApplicationDataCompositeValue. Tento příklad vytvoří složené nastavení s názvem exampleCompositeSetting a přidá ho do kontejneru localSettings .

// Composite setting

Windows.Storage.ApplicationDataCompositeValue composite = 
    new Windows.Storage.ApplicationDataCompositeValue();
composite["intVal"] = 1;
composite["strVal"] = "string";

localSettings.Values["exampleCompositeSetting"] = composite;

Tento příklad ukazuje, jak načíst složenou hodnotu, kterou jsme právě vytvořili.

// Composite setting

Windows.Storage.ApplicationDataCompositeValue composite = 
   (Windows.Storage.ApplicationDataCompositeValue)localSettings.Values["exampleCompositeSetting"];

if (composite == null)
{
   // No data
}
else
{
   // Access data in composite["intVal"] and composite["strVal"]
}

Vytvoření a čtení místního souboru

Pokud chcete vytvořit a aktualizovat soubor v úložišti dat místní aplikace, použijte rozhraní API souborů, například Windows. Storage.StorageFolder.CreateFileAsync a Windows. Storage.FileIO.WriteTextAsync. Tento příklad vytvoří soubor pojmenovaný dataFile.txt v kontejneru localFolder a zapíše do souboru aktuální datum a čas. Hodnota ReplaceExisting z CreationCollisionOption označuje nahrazení souboru, pokud již existuje.

async void WriteTimestamp()
{
   Windows.Globalization.DateTimeFormatting.DateTimeFormatter formatter = 
       new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("longtime");

   StorageFile sampleFile = await localFolder.CreateFileAsync("dataFile.txt", 
       CreationCollisionOption.ReplaceExisting);
   await FileIO.WriteTextAsync(sampleFile, formatter.Format(DateTimeOffset.Now));
}

Pokud chcete otevřít a přečíst soubor v úložišti dat místní aplikace, použijte rozhraní API souborů, například Windows. Storage.StorageFolder.GetFileAsync, Windows. Storage.StorageFile.GetFileFromApplicationUriAsync a Windows. Storage.FileIO.ReadTextAsync. Tento příklad otevře dataFile.txt soubor vytvořený v předchozím kroku a přečte datum ze souboru. Podrobnosti o načítání prostředků souborů z různých umístění najdete v tématu Jak načíst prostředky souborů.

async void ReadTimestamp()
{
   try
   {
      StorageFile sampleFile = await localFolder.GetFileAsync("dataFile.txt");
      String timestamp = await FileIO.ReadTextAsync(sampleFile);
      // Data is contained in timestamp
   }
   catch (Exception)
   {
      // Timestamp not found
   }
}

Roamingová data

Výstraha

Roamingová data a nastavení se v Windows 11 už nepodporují. Doporučená náhrada je Azure App Service. Azure App Service je široce podporovaná, dobře zdokumentovaná, spolehlivá a podporuje scénáře pro různé platformy nebo různé ekosystémy, jako jsou iOS, Android a web.

Důležité

Data RoamingSettings se nemusí uchovávat prostřednictvím aktualizací aplikace Microsoft Store ani v Windows 10. Pro nastavení, která musí přežít aktualizace aplikace, použijte místo toho LocalSettings .

Dočasná data aplikací

Dočasné úložiště dat aplikací funguje jako mezipaměť. Jeho soubory se nesynchronizují a lze je kdykoli odstranit. Úloha údržby systému může automaticky odstranit data uložená v tomto umístění kdykoli. Uživatel také může vymazat soubory z dočasného úložiště dat pomocí vyčištění disku. Dočasná data aplikace lze použít k ukládání dočasných informací během relace aplikace. Není zaručeno, že tato data zůstanou za koncem relace aplikace, protože systém může v případě potřeby uvolnit využité místo. Umístění je k dispozici prostřednictvím vlastnosti temporaryFolder.

Načtení dočasného kontejneru dat

K získání souborů použijte vlastnost ApplicationData.TemporaryFolder . Další kroky používají proměnnou temporaryFolder z tohoto kroku.

Windows.Storage.StorageFolder temporaryFolder = ApplicationData.Current.TemporaryFolder;

Vytváření a čtení dočasných souborů

Pokud chcete vytvořit a aktualizovat soubor v dočasném úložišti dat aplikace, použijte rozhraní API souborů, například Windows. Storage.StorageFolder.CreateFileAsync a Windows. Storage.FileIO.WriteTextAsync. Tento příklad vytvoří soubor pojmenovaný dataFile.txt v kontejneru temporaryFolder a zapíše do souboru aktuální datum a čas. Hodnota ReplaceExisting z CreationCollisionOption označuje nahrazení souboru, pokud již existuje.

async void WriteTimestamp()
{
   Windows.Globalization.DateTimeFormatting.DateTimeFormatter formatter = 
       new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("longtime");

   StorageFile sampleFile = await temporaryFolder.CreateFileAsync("dataFile.txt", 
       CreationCollisionOption.ReplaceExisting);
   await FileIO.WriteTextAsync(sampleFile, formatter.Format(DateTimeOffset.Now));
}

Pokud chcete otevřít a číst soubor v dočasném úložišti dat aplikace, použijte rozhraní API souborů, například Windows. Storage.StorageFolder.GetFileAsync, Windows. Storage.StorageFile.GetFileFromApplicationUriAsync a Windows. Storage.FileIO.ReadTextAsync. Tento příklad otevře dataFile.txt soubor vytvořený v předchozím kroku a přečte datum ze souboru. Podrobnosti o načítání prostředků souborů z různých umístění najdete v tématu Jak načíst prostředky souborů.

async void ReadTimestamp()
{
   try
   {
      StorageFile sampleFile = await temporaryFolder.GetFileAsync("dataFile.txt");
      String timestamp = await FileIO.ReadTextAsync(sampleFile);
      // Data is contained in timestamp
   }
   catch (Exception)
   {
      // Timestamp not found
   }
}

Uspořádání dat aplikací pomocí kontejnerů

Abyste mohli uspořádat nastavení dat a soubory aplikace, vytvoříte kontejnery (reprezentované objekty ApplicationDataContainer) místo toho, abyste pracovali přímo s adresáři. Kontejnery můžete přidat do místních, roamingových a dočasných úložišť dat aplikací. Kontejnery je možné vnořit až do hloubky 32 úrovní.

Chcete-li vytvořit kontejner nastavení, zavolejte ApplicationDataContainer.CreateContainer metoda. Tento příklad vytvoří kontejner místních nastavení s názvem exampleContainer a přidá nastavení s názvem exampleSetting. Hodnota Always z ApplicationDataCreateDisposition výčtu indikuje, že se kontejner vytvoří, pokud ještě neexistuje.

Windows.Storage.ApplicationDataContainer localSettings = 
    Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.StorageFolder localFolder = 
    Windows.Storage.ApplicationData.Current.LocalFolder;

// Setting in a container
Windows.Storage.ApplicationDataContainer container = 
   localSettings.CreateContainer("exampleContainer", Windows.Storage.ApplicationDataCreateDisposition.Always);

if (localSettings.Containers.ContainsKey("exampleContainer"))
{
   localSettings.Containers["exampleContainer"].Values["exampleSetting"] = "Hello Windows";
}

Odstranění nastavení a kontejnerů aplikací

Pokud chcete odstranit jednoduché nastavení, které už vaše aplikace nepotřebuje, použijte metodu ApplicationDataContainerSettings.Remove . Tento příklad odstraní exampleSetting místní nastavení, které jsme vytvořili dříve.

Windows.Storage.ApplicationDataContainer localSettings = 
    Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.StorageFolder localFolder = 
    Windows.Storage.ApplicationData.Current.LocalFolder;

// Delete simple setting

localSettings.Values.Remove("exampleSetting");

Chcete-li odstranit složené nastavení, použijte ApplicationDataCompositeValue.Remove metoda. Tento příklad odstraní místní exampleCompositeSetting složené nastavení, které jsme vytvořili v předchozím příkladu.

Windows.Storage.ApplicationDataContainer localSettings = 
    Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.StorageFolder localFolder = 
    Windows.Storage.ApplicationData.Current.LocalFolder;

// Delete composite setting

localSettings.Values.Remove("exampleCompositeSetting");

Chcete-li odstranit kontejner, zavolejte ApplicationDataContainer.DeleteContainer metoda. Tento příklad odstraní kontejner místních exampleContainer nastavení, který jsme vytvořili dříve.

Windows.Storage.ApplicationDataContainer localSettings = 
    Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.StorageFolder localFolder = 
    Windows.Storage.ApplicationData.Current.LocalFolder;

// Delete container

localSettings.DeleteContainer("exampleContainer");

Správa verzí dat aplikace

Můžete volitelně verzovat data své aplikace. To vám umožní vytvořit budoucí verzi aplikace, která změní formát dat aplikace, aniž by to způsobilo problémy s kompatibilitou s předchozí verzí aplikace. Aplikace zkontroluje verzi dat aplikace v úložišti dat a pokud je verze menší než verze, kterou aplikace očekává, měla by aplikace aktualizovat data aplikace na nový formát a aktualizovat verzi. Další informace naleznete v ApplicationData.Version vlastnost a ApplicationData.SetVersionAsync metoda.