Przechowywanie i pobieranie ustawień oraz innych danych aplikacji

Ważna

Interfejsy API ApplicationData opisane w tym artykule są przeznaczone dla spakowanych aplikacji. Aplikacje rozpakowane nie mają dostępu do magazynów danych aplikacji zarządzanych przez system i powinny używać alternatywnych mechanizmów magazynowania, takich jak bezpośrednie we/wy plików lub dostęp do rejestru.

Dane aplikacji to dane modyfikowalne, które są tworzone i zarządzane przez określoną aplikację. Obejmuje stan środowiska uruchomieniowego, ustawienia aplikacji, preferencje użytkownika, zawartość referencyjną (taką jak definicje słownika w aplikacji słownika) i inne ustawienia. Dane aplikacji różnią się od danych użytkownika, danych tworzonych przez użytkownika i zarządzanych podczas korzystania z aplikacji. Dane użytkownika obejmują pliki dokumentów lub multimediów, transkrypcje poczty e-mail lub komunikacji albo rekordy bazy danych zawierające zawartość utworzoną przez użytkownika. Dane użytkownika mogą być przydatne lub istotne dla więcej niż jednej aplikacji. Często są to dane, które użytkownik chce manipulować lub przesyłać jako jednostkę niezależną od samej aplikacji, na przykład dokument.

Ważna uwaga dotycząca danych aplikacji: Okres istnienia danych aplikacji jest powiązany z okresem istnienia aplikacji. Jeśli aplikacja zostanie usunięta, wszystkie dane aplikacji zostaną utracone w konsekwencji. Nie używaj danych aplikacji do przechowywania danych użytkownika ani żadnych elementów, które użytkownicy mogą postrzegać jako cenne i niezastąpione. Zalecamy, aby biblioteki użytkownika i Microsoft OneDrive były używane do przechowywania tego rodzaju informacji. Dane aplikacji idealnie nadają się do przechowywania preferencji użytkownika, ustawień i ulubionych specyficznych dla aplikacji.

Typy danych aplikacji

Istnieją dwa typy danych aplikacji: ustawienia i pliki.

Settings

Użyj ustawień do przechowywania preferencji użytkownika i informacji o stanie aplikacji. Interfejs API danych aplikacji umożliwia łatwe tworzenie i pobieranie ustawień (w dalszej części tego artykułu przedstawiono kilka przykładów).

Poniżej przedstawiono typy danych, których można użyć dla ustawień aplikacji:

  • UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single, Double
  • Boolean
  • Char16, String
  • DateTime, TimeSpan
  • GUID, Point, Size, Rect
  • ApplicationDataCompositeValue: zestaw powiązanych ustawień aplikacji, które muszą być serializowane i deserializowane atomowo. Użyj ustawień złożonych, aby łatwo zarządzać atomowymi aktualizacjami ustawień wzajemnie zależnych. System zapewnia integralność ustawień złożonych podczas współbieżnego dostępu i roamingu. Ustawienia złożone są zoptymalizowane pod kątem małych ilości danych, a wydajność może być niska, jeśli używasz ich do dużych zestawów danych.

Files

Użyj plików do przechowywania danych binarnych lub w celu włączenia własnych, dostosowanych typów serializowanych.

Przechowywanie danych aplikacji w magazynach danych aplikacji

Po zainstalowaniu aplikacji system przydziela jej odrębne, przeznaczone dla poszczególnych użytkowników magazyny danych na ustawienia i pliki. Nie musisz wiedzieć, gdzie lub jak istnieją te dane, ponieważ system jest odpowiedzialny za zarządzanie magazynem fizycznym, zapewniając, że dane są odizolowane od innych aplikacji i innych użytkowników. System zazwyczaj zachowuje zawartość tych magazynów danych, gdy użytkownik instaluje aktualizację aplikacji, chociaż RoamingSettings mogą nie być utrwalane poprzez aktualizacje Microsoft Store (zobacz Dane roamingu). W przypadku ustawień, które muszą przetrwać aktualizacje aplikacji, użyj ustawień lokalnych. System usuwa zawartość tych magazynów danych całkowicie i czysto po odinstalowaniu aplikacji.

W magazynie danych aplikacji każda aplikacja ma katalogi główne zdefiniowane przez system: jeden dla plików lokalnych, jeden dla plików mobilnych i jeden dla plików tymczasowych. Aplikacja może dodawać nowe pliki i nowe kontenery do każdego z tych katalogów głównych.

Dane aplikacji lokalnej

Dane aplikacji lokalnych powinny być używane dla wszelkich informacji, które należy zachować między sesjami aplikacji i nie są odpowiednie dla danych aplikacji mobilnych. Dane, które nie mają zastosowania na innych urządzeniach, również powinny być przechowywane w tym miejscu. Nie ma ogólnego ograniczenia rozmiaru dla przechowywanych danych lokalnych. Użyj lokalnego magazynu danych aplikacji dla danych, których nie ma sensu synchronizować oraz dużych zestawów danych. Dane aplikacji lokalnych są niezawodnie utrwalane za pośrednictwem aktualizacji aplikacji, dzięki czemu ustawienie LocalSettings jest zalecanym wyborem dla preferencji użytkownika i stanu aplikacji, które muszą przetrwać Microsoft Store aktualizacji.

Pobierz lokalny magazyn danych aplikacji

Aby móc odczytywać lub zapisywać dane aplikacji lokalnej, musisz pobrać lokalny magazyn danych aplikacji. Aby pobrać magazyn danych aplikacji lokalnej, użyj właściwości ApplicationData.LocalSettings, aby uzyskać ustawienia lokalne aplikacji jako obiekt ApplicationDataContainer. Użyj właściwości ApplicationData.LocalFolder, aby pobrać pliki w obiekcie StorageFolder. Użyj właściwości ApplicationData.LocalCacheFolder , aby pobrać folder w lokalnym magazynie danych aplikacji, w którym można zapisywać pliki, które nie są uwzględniane w kopii zapasowej i przywracaniu.

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

Tworzenie i pobieranie prostego ustawienia lokalnego

Aby utworzyć lub napisać ustawienie, użyj właściwości ApplicationDataContainer.Values , aby uzyskać dostęp do ustawień w localSettings kontenerze, który uzyskaliśmy w poprzednim kroku. W tym przykładzie zostanie utworzone ustawienie o nazwie exampleSetting.

// Simple setting

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

Aby pobrać to ustawienie, użyj tej samej właściwości ApplicationDataContainer.Values użytej do utworzenia ustawienia. W tym przykładzie pokazano, jak pobrać właśnie utworzone ustawienie.

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

Tworzenie i pobieranie lokalnej wartości złożonej

Aby utworzyć lub zapisać wartość złożoną, utwórz obiekt ApplicationDataCompositeValue. W tym przykładzie tworzone jest ustawienie złożone o nazwie exampleCompositeSetting i dodaje je do kontenera localSettings .

// Composite setting

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

localSettings.Values["exampleCompositeSetting"] = composite;

W tym przykładzie pokazano, jak pobrać właśnie utworzoną wartość złożoną.

// 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"]
}

Tworzenie i odczytywanie pliku lokalnego

Aby utworzyć i zaktualizować plik w lokalnym magazynie danych aplikacji, użyj interfejsów API plików, takich jak Windows. Storage.StorageFolder.CreateFileAsync i Windows. Storage.FileIO.WriteTextAsync. W tym przykładzie tworzony jest plik o nazwie dataFile.txt w kontenerze localFolder i zapisuje bieżącą datę i godzinę w pliku. Wartość ReplaceExisting z CreationCollisionOption oznacza, że należy zastąpić ten plik, jeśli już istnieje.

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));
}

Aby otworzyć i odczytać plik w lokalnym magazynie danych aplikacji, użyj interfejsów API plików, takich jak Windows. Storage.StorageFolder.GetFileAsync, Windows. Storage.StorageFile.GetFileFromApplicationUriAsync i Windows. Storage.FileIO.ReadTextAsync. W tym przykładzie otwierany jest plik dataFile.txt, utworzony w poprzednim kroku, i odczytywana jest z niego data. Aby uzyskać szczegółowe informacje na temat ładowania zasobów plików z różnych lokalizacji, zobacz Jak załadować zasoby plików.

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
   }
}

Roaming danych

Ostrzeżenie

Dane i ustawienia roamingu są już nieobsługiwane od wersji Windows 11. Zalecaną zamianą jest Azure App Service. Azure App Service jest powszechnie obsługiwana, dobrze udokumentowana, niezawodna i obsługuje scenariusze międzyplatformowe/między ekosystemami, takie jak systemy iOS, Android i internet.

Ważna

Dane RoamingSettings mogą nie być utrwalane podczas aktualizacji aplikacji Microsoft Store nawet w systemie Windows 10. W przypadku ustawień, które muszą przetrwać aktualizacje aplikacji, należy zamiast tego użyć ustawienia LocalSettings .

Tymczasowe dane aplikacji

Tymczasowy magazyn danych aplikacji działa jak pamięć podręczna. Jego pliki nie wędrują i można je usunąć w dowolnym momencie. Zadanie Konserwacji systemu może automatycznie usuwać dane przechowywane w tej lokalizacji w dowolnym momencie. Użytkownik może również wyczyścić pliki z tymczasowego magazynu danych przy użyciu oczyszczania dysku. Tymczasowe dane aplikacji mogą służyć do przechowywania informacji tymczasowych podczas sesji aplikacji. Nie ma gwarancji, że te dane będą utrwalane poza końcem sesji aplikacji, ponieważ system może odzyskać używane miejsce w razie potrzeby. Lokalizacja jest dostępna za pośrednictwem właściwości temporaryFolder .

Pobieranie kontenera danych tymczasowych

Użyj właściwości ApplicationData.TemporaryFolder , aby pobrać pliki. W następnych krokach użyj zmiennej temporaryFolder z tego kroku.

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

Tworzenie i odczytywanie plików tymczasowych

Aby utworzyć i zaktualizować plik w tymczasowym magazynie danych aplikacji, użyj interfejsów API plików, takich jak Windows. Storage.StorageFolder.CreateFileAsync i Windows. Storage.FileIO.WriteTextAsync. W tym przykładzie tworzony jest plik o nazwie dataFile.txt w kontenerze temporaryFolder i zapisuje bieżącą datę i godzinę w pliku. Wartość ReplaceExisting z CreationCollisionOption oznacza, że należy zastąpić ten plik, jeśli już istnieje.

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

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

Aby otworzyć i odczytać plik w tymczasowym magazynie danych aplikacji, użyj interfejsów API plików, takich jak Windows. Storage.StorageFolder.GetFileAsync, Windows. Storage.StorageFile.GetFileFromApplicationUriAsync i Windows. Storage.FileIO.ReadTextAsync. W tym przykładzie otwierany jest plik dataFile.txt, utworzony w poprzednim kroku, i odczytywana jest z niego data. Aby uzyskać szczegółowe informacje na temat ładowania zasobów plików z różnych lokalizacji, zobacz Jak załadować zasoby plików.

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
   }
}

Organizowanie danych aplikacji za pomocą kontenerów

Aby ułatwić organizowanie ustawień i plików danych aplikacji, należy tworzyć kontenery (reprezentowane przez ApplicationDataContainer obiektów) zamiast pracować bezpośrednio z katalogami. Kontenery można dodawać do magazynów danych aplikacji lokalnych, mobilnych i tymczasowych. Kontenery mogą być zagnieżdżone do 32 poziomów głębokości.

Aby utworzyć kontener ustawień, wywołaj metodę ApplicationDataContainer.CreateContainer . W tym przykładzie tworzony jest kontener ustawień lokalnych o nazwie exampleContainer i dodaje ustawienie o nazwie exampleSetting. Wartość Always z ApplicationDataCreateDisposition wskazuje, że kontener jest tworzony, jeśli jeszcze nie istnieje.

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";
}

Usuwanie ustawień aplikacji i kontenerów

Aby usunąć proste ustawienie, którego aplikacja nie potrzebuje, użyj metody ApplicationDataContainerSettings.Remove . W tym przykładzie usunięto exampleSetting utworzone wcześniej ustawienie lokalne.

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");

Aby usunąć ustawienie złożone, użyj metody ApplicationDataCompositeValue.Remove . W tym przykładzie usunięto lokalne exampleCompositeSetting ustawienie złożone utworzone we wcześniejszym przykładzie.

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");

Aby usunąć kontener, wywołaj metodę ApplicationDataContainer.DeleteContainer . W tym przykładzie usunięto utworzony wcześniej kontener ustawień lokalnych exampleContainer .

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

// Delete container

localSettings.DeleteContainer("exampleContainer");

Zarządzanie wersjami danych aplikacji

Opcjonalnie możesz wersjonować dane swojej aplikacji. Umożliwiłoby to utworzenie przyszłej wersji aplikacji, która zmienia format danych aplikacji bez powodowania problemów ze zgodnością z poprzednią wersją aplikacji. Aplikacja sprawdza wersję danych aplikacji w magazynie danych, a jeśli wersja jest mniejsza niż oczekiwana wersja, aplikacja powinna zaktualizować dane aplikacji do nowego formatu i zaktualizować wersję. Aby uzyskać więcej informacji, zobacz właściwośćApplication.Version i metodę ApplicationData.SetVersionAsync .