Speichern und Abrufen von Einstellungen und anderen App-DatenStore and retrieve settings and other app data

App-Daten sind änderbare Daten, die von einer bestimmten App erstellt und verwaltet werden.App data is mutable data that is created and managed by a specific app. Sie beinhalten den Laufzeitstatus, App-Einstellungen, Benutzereinstellungen, Referenzinhalte (beispielsweise die Wörterbuchdefinitionen in einer Wörterbuch-App) und andere Einstellungen.It includes runtime state, app settings, user preferences, reference content (such as the dictionary definitions in a dictionary app), and other settings. App-Daten unterscheiden sich von Benutzerdaten , Daten, die der Benutzer beim Verwenden einer App erstellt und verwaltet.App data is different from user data , data that the user creates and manages when using an app. Benutzerdaten umfassen Dokument- oder Mediendateien, E-Mail- oder Kommunikationstranskripte oder Datenbankeinträge, mit vom Benutzer erstellte Inhalte enthalten.User data includes document or media files, email or communication transcripts, or database records holding content created by the user. Benutzerdaten können für mehrere Apps nützlich oder von Bedeutung sein.User data may be useful or meaningful to more than one app. Häufig handelt es sich dabei um Daten, die der Benutzer als von der App unabhängige Entität ändern oder übertragen möchte (z. B. ein Dokument).Often, this is data that the user wants to manipulate or transmit as an entity independent of the app itself, such as a document.

Wichtiger Hinweis zu App-Daten: Die Lebensdauer der App-Daten ist an die Lebensdauer der App gebunden.Important note about app data: The lifetime of the app data is tied to the lifetime of the app. Wenn die App entfernt wird, gehen auch alle App-Daten verloren.If the app is removed, all of the app data will be lost as a consequence. Verwenden Sie App-Daten nicht zum Speichern von Benutzerdaten oder anderen Daten, die Benutzer als wertvoll und unersetzlich betrachten.Don't use app data to store user data or anything that users might perceive as valuable and irreplaceable. Solche Informationen sollten in den Bibliotheken des Benutzers und auf Microsoft OneDrive gespeichert werden.We recommend that the user's libraries and Microsoft OneDrive be used to store this sort of information. App-Daten eignen sich perfekt zum Speichern von App-spezifischen (Benutzer-)Einstellungen und Favoriten.App data is ideal for storing app-specific user preferences, settings, and favorites.

App-DatentypenTypes of app data

Es gibt zwei Arten von App-Daten: Einstellungen und Dateien.There are two types of app data: settings and files.

SettingsSettings

Verwenden Sie die Einstellungen zum Speichern von Benutzereinstellungen und Anwendungsstatus-Informationen.Use settings to store user preferences and application state info. Mit der App-Daten-API können Sie ganz einfach Einstellungen erstellen und abrufen (später in diesem Artikel zeigen wir Ihnen einige Beispiele dazu).The app data API enables you to easily create and retrieve settings (we'll show you some examples later in this article).

Im Folgenden finden Sie Datentypen, die Sie für App-Einstellungen verwenden können:Here are data types you can use for app settings:

  • UInt8 , Int16 , UInt16 , Int32 , UInt32 , Int64 , UInt64 , Single , DoubleUInt8 , Int16 , UInt16 , Int32 , UInt32 , Int64 , UInt64 , Single , Double
  • BooleanBoolean
  • Char16 , StringChar16 , String
  • DateTime, TimeSpanDateTime, TimeSpan
  • GUID , Point, Size, RectGUID , Point, Size, Rect
  • ApplicationDataCompositeValue: Eine Reihe von verwandten App-Einstellungen, die atomisch serialisiert und deserialisiert werden müssen.ApplicationDataCompositeValue: A set of related app settings that must be serialized and deserialized atomically. Verwenden Sie Verbundeinstellungen, um atomische Aktualisierungen voneinander abhängiger Einstellungen problemlos behandeln zu können.Use composite settings to easily handle atomic updates of interdependent settings. Das System stellt die Integrität von Verbundeinstellungen bei gleichzeitigem Zugriff und Roaming sicher.The system ensures the integrity of composite settings during concurrent access and roaming. Verbundeinstellungen sind für kleine Datenmengen vorgesehen. Bei Verwendung für große Datasets kann die Leistung beeinträchtigt werden.Composite settings are optimized for small amounts of data, and performance can be poor if you use them for large data sets.

DateienFiles

Verwenden Sie Dateien zum Speichern von Binärdaten oder zum Aktivieren Ihrer eigenen, benutzerdefinierten, serialisierten Typen.Use files to store binary data or to enable your own, customized serialized types.

Speichern von App-Daten in den App-DatenspeichernStoring app data in the app data stores

Bei der Installation einer App weist das System der App eigene, benutzerspezifische Datenspeicher für Einstellungen und Dateien zu.When an app is installed, the system gives it its own per-user data stores for settings and files. Sie müssen nicht wissen, wo und wie diese Daten vorhanden ist, da das System für die Verwaltung des physischen Speichers zuständig ist. Damit wird sichergestellt, dass die Daten von anderen Apps und anderen Benutzern isoliert gehalten werden.You don't need to know where or how this data exists, because the system is responsible for managing the physical storage, ensuring that the data is kept isolated from other apps and other users. Das System behält außerdem den Inhalt dieser Datenspeicher bei, wenn der Benutzer ein App-Update installiert, und entfernt den Inhalt dieser Datenspeicher vollständig und sauber, wenn die App deinstalliert wird.The system also preserves the contents of these data stores when the user installs an update to your app and removes the contents of these data stores completely and cleanly when your app is uninstalled.

Jede App verfügt in ihrem jeweiligen App-Datenspeicher über systemdefinierte Stammverzeichnisse: eines für lokale Dateien, eines für Roamingdateien und eines für temporäre Dateien.Within its app data store, each app has system-defined root directories: one for local files, one for roaming files, and one for temporary files. Ihre App kann den Stammverzeichnissen neue Dateien und Container hinzufügen.Your app can add new files and new containers to each of these root directories.

Lokale App-DatenLocal app data

Lokale App-Daten sollten für alle Informationen verwendet werden, die zwischen App-Sitzungen beibehalten werden müssen und die nicht als App-Roamingdaten geeignet sind.Local app data should be used for any information that needs to be preserved between app sessions and is not suitable for roaming app data. Daten, die auf anderen Geräten nicht verwendet werden können, sollten ebenfalls dort gespeichert werden.Data that is not applicable on other devices should be stored here as well. Es gibt keine allgemeinen Größenbeschränkungen für lokal gespeicherte Daten.There is no general size restriction on local data stored. Verwenden Sie den lokalen App-Datenspeicher für Daten, für die ein Roaming nicht sinnvoll ist, sowie für große Datasets.Use the local app data store for data that it does not make sense to roam and for large data sets.

Abrufen des lokalen App-DatenspeichersRetrieve the local app data store

Bevor Sie lokale App-Daten lesen oder schreiben können, müssen Sie den lokalen App-Datenspeicher abrufen.Before you can read or write local app data, you must retrieve the local app data store. Verwenden Sie zum Abrufen des lokalen App-Datenspeichers die ApplicationData.LocalSettings-Eigenschaft, um die lokalen Einstellungen der App als ApplicationDataContainer-Objekt abzurufen.To retrieve the local app data store, use the ApplicationData.LocalSettings property to get the app's local settings as an ApplicationDataContainer object. Verwenden Sie die ApplicationData.LocalFolder-Eigenschaft, um die Dateien aus einem StorageFolder-Objekt abzurufen.Use the ApplicationData.LocalFolder property to get the files in a StorageFolder object. Verwenden Sie die ApplicationData.LocalCacheFolder-Eigenschaft, um den Ordner im lokalen App-Datenspeicher abzurufen, in dem Sie Dateien speichern können, die nicht in der Sicherung und Wiederherstellung enthalten sind.Use the ApplicationData.LocalCacheFolder property to get the folder in the local app data store where you can save files that are not included in backup and restore.

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

Erstellen und Abrufen einer einfachen lokalen EinstellungCreate and retrieve a simple local setting

Um eine Einstellung zu erstellen oder zu schreiben, verwenden Sie die ApplicationDataContainer.Values-Eigenschaft, um auf die Einstellungen im localSettings-Container zuzugreifen, den wir im vorherigen Schritt abgerufen haben.To create or write a setting, use the ApplicationDataContainer.Values property to access the settings in the localSettings container we got in the previous step. In diesem Beispiel wird eine Einstellung namens exampleSetting erstellt.This example creates a setting named exampleSetting.

// Simple setting

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

Um die Einstellung abzurufen, verwenden Sie dieselbe ApplicationDataContainer.Values-Eigenschaft, mit der Sie die Einstellung erstellt haben.To retrieve the setting, you use the same ApplicationDataContainer.Values property that you used to create the setting. Dieses Beispiel zeigt, wie Sie die gerade erstellte Einstellung abrufen können.This example shows how to retrieve the setting we just created.

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

Erstellen und Abrufen eines lokalen zusammengesetzten WertsCreate and retrieve a local composite value

Erstellen Sie zum Erstellen oder Schreiben eines zusammengesetzten Werts ein ApplicationDataCompositeValue-Objekt.To create or write a composite value, create an ApplicationDataCompositeValue object. In diesem Beispiel wird eine Verbundeinstellung namens exampleCompositeSetting erstellt und dem Container localSettings hinzugefügt.This example creates a composite setting named exampleCompositeSetting and adds it to the localSettings container.

// Composite setting

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

localSettings.Values["exampleCompositeSetting"] = composite;

In diesem Beispiel wird veranschaulicht, wie der gerade erstellte, zusammengesetzte Wert abgerufen werden kann.This example shows how to retrieve the composite value we just created.

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

Erstellen und Lesen einer lokalen DateiCreate and read a local file

Verwenden Sie die Datei-APIs (z. B. Windows.Storage.StorageFolder.CreateFileAsync und Windows.Storage.FileIO.WriteTextAsync), um eine Datei im lokalen App-Datenspeicher zu erstellen und zu aktualisieren.To create and update a file in the local app data store, use the file APIs, such as Windows.Storage.StorageFolder.CreateFileAsync and Windows.Storage.FileIO.WriteTextAsync. In diesem Beispiel wird im Container localFolder die Datei dataFile.txt erstellt, in die das aktuelle Datum und die Uhrzeit geschrieben werden.This example creates a file named dataFile.txt in the localFolder container and writes the current date and time to the file. Der Wert ReplaceExisting aus der CreationCollisionOption-Enumeration gibt an, dass die Datei ersetzt werden soll, falls sie bereits vorhanden ist.The ReplaceExisting value from the CreationCollisionOption enumeration indicates to replace the file if it already exists.

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

Verwenden Sie die Datei-APIs (z. B. Windows.Storage.StorageFolder.GetFileAsync, Windows.Storage.StorageFile.GetFileFromApplicationUriAsync und Windows.Storage.FileIO.ReadTextAsync), um eine Datei im lokalen App-Datenspeicher zu öffnen und zu lesen.To open and read a file in the local app data store, use the file APIs, such as Windows.Storage.StorageFolder.GetFileAsync, Windows.Storage.StorageFile.GetFileFromApplicationUriAsync, and Windows.Storage.FileIO.ReadTextAsync. In diesem Beispiel wird die im vorherigen Schritt erstellte Datei dataFile.txt geöffnet und das Datum aus der Datei gelesen.This example opens the dataFile.txt file created in the previous step and reads the date from the file. Einzelheiten zum Laden von Dateiressourcen aus verschiedenen Speicherorten finden Sie unter So wird's gemacht: Laden von Dateiressourcen.For details on loading file resources from various locations, see How to load file resources.

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

RoamingdatenRoaming data

Wenn Sie Roamingdaten in Ihrer App verwenden, können Benutzer die App-Daten der App problemlos für mehrere Geräte synchronisieren.If you use roaming data in your app, your users can easily keep your app's app data in sync across multiple devices. Installiert ein Benutzer eine App auf mehreren Geräten, sorgt das Betriebssystem dafür, dass die App-Daten synchronisiert sind, und verringert so den Einrichtungsaufwand für die App auf weiteren Geräten.If a user installs your app on multiple devices, the OS keeps the app data in sync, reducing the amount of setup work that the user needs to do for your app on their second device. Mittels Roaming können Benutzer außerdem eine Aufgabe (beispielsweise das Erstellen einer Liste) an genau dem Punkt fortsetzen, an dem sie die Aufgabe auf einem anderen Gerät unterbrochen haben.Roaming also enables your users to continue a task, such as composing a list, right where they left off even on a different device. Das Betriebssystem repliziert aktualisierte Roamingdaten in der Cloud und synchronisiert die Daten mit den anderen Geräten, auf denen die App installiert ist.The OS replicates roaming data to the cloud when it is updated, and synchronizes the data to the other devices on which the app is installed.

Das Betriebssystem begrenzt für jede App die Menge der App-Daten für das Roaming.The OS limits the size of the app data that each app may roam. Siehe ApplicationData.RoamingStorageQuota.See ApplicationData.RoamingStorageQuota. Erreicht die App diese Grenze, werden keine App-Daten der App mehr in die Cloud repliziert, bis die Gesamtmenge der App-Roamingdaten wieder unter dem Grenzwert liegt.If the app hits this limit, none of the app's app data will be replicated to the cloud until the app's total roamed app data is less than the limit again. Aus diesem Grund ist es empfehlenswert, Roamingdaten nur für Benutzereinstellungen, Links und kleine Datendateien zu verwenden.For this reason, it is a best practice to use roaming data only for user preferences, links, and small data files.

Roamingdaten für Apps sind in der Cloud verfügbar, solange der Benutzer innerhalb des erforderlichen Zeitintervalls mit einem Gerät darauf zugreift.Roaming data for an app is available in the cloud as long as it is accessed by the user from some device within the required time interval. Führt ein Benutzer eine App für eine dieses Zeitintervall nicht überschreitende Spanne aus, werden die Roamingdaten aus der Cloud gelöscht.If the user does not run an app for longer than this time interval, its roaming data is removed from the cloud. Bei der Deinstallation einer App werden die entsprechenden Roamingdaten in der Cloud nicht automatisch gelöscht, sondern beibehalten.If a user uninstalls an app, its roaming data isn't automatically removed from the cloud, it's preserved. Installiert der Benutzer die App innerhalb des Zeitintervalls wieder, werden die Roamingdaten über die Cloud synchronisiert.If the user reinstalls the app within the time interval, the roaming data is synchronized from the cloud.

Empfohlene und nicht empfohlene Vorgehensweisen für RoamingdatenRoaming data do's and don'ts

  • Verwenden Sie Roaming für Benutzereinstellungen und -anpassungen, Links und kleine Datendateien.Use roaming for user preferences and customizations, links, and small data files. Sie können mithilfe von Roaming beispielsweise dafür sorgen, dass die vom Benutzer vorgenommene Einstellung für die Hintergrundfarbe auf allen Geräten angewendet wird.For example, use roaming to preserve a user's background color preference across all devices.
  • Verwenden Sie Roaming, damit Benutzer eine Aufgabe auf mehreren Geräten fortsetzen können.Use roaming to let users continue a task across devices. Sie können das Roaming für Anwendungsdaten beispielsweise implementieren, um den Inhalt eines E-Mail-Entwurfs oder die zuletzt angezeigte Seite in einer Lese-App zu speichern.For example, roam app data like the contents of an drafted email or the most recently viewed page in a reader app.
  • Behandeln Sie das DataChanged-Ereignis, indem Sie App-Daten aktualisieren.Handle the DataChanged event by updating app data. Dieses Ereignis tritt unmittelbar nach der Synchronisierung der App-Daten mit der Cloud auf.This event occurs when app data has just finished syncing from the cloud.
  • Führen Sie Roaming für Verweise auf Inhalte durch, anstelle für unformatierte Daten.Roam references to content rather than raw data. Das Roaming für eine URL eines Onlineartikel ist beispielsweise sinnvoller als das Roaming für den Inhalt des Artikels.For example, roam a URL rather than the content of an online article.
  • Verwenden Sie für wichtige, zeitkritische Informationen die Einstellung HighPriority zusammen mit RoamingSettings.For important, time critical settings, use the HighPriority setting associated with RoamingSettings.
  • Führen Sie kein Roaming für gerätespezifische App-Daten durch.Don't roam app data that is specific to a device. Manche dieser Informationen sind ausschließlich lokal relevant, wie beispielsweise der Pfadname zu einer lokalen Dateiressource.Some info is only pertinent locally, such as a path name to a local file resource. Wenn Sie lokale Informationen als Roamingdaten verwenden möchten, stellen Sie sicher, dass die App wiederhergestellt werden kann, wenn die Informationen auf dem zweiten Gerät nicht gültig sind.If you do decide to roam local information, make sure that the app can recover if the info isn't valid on the secondary device.
  • Führen Sie kein Roaming für große App-Datenmengen durch.Don't roam large sets of app data. Die Menge der App-Daten für das Roaming ist begrenzt. Verwenden Sie die Eigenschaft RoamingStorageQuota, um diese maximale Datenmenge zu implementieren.There's a limit to the amount of app data an app may roam; use RoamingStorageQuota property to get this maximum. Wenn eine App diese Grenze erreicht, wird so lange kein Datenroaming durchgeführt, bis die Größe des App-Datenspeichers wieder unter die Grenze fällt.If an app hits this limit, no data can roam until the size of the app data store no longer exceeds the limit. Berücksichtigen Sie beim App-Design, wie eine Grenze für größere Datenmengen festgelegt wird, sodass die Begrenzung nicht überschritten wird.When you design your app, consider how to put a bound on larger data so as to not exceed the limit. Wenn für das Speichern eines Spielstands beispielsweise jeweils 10 KB erforderlich sind, sollte die App unter Umständen höchstens zulassen, dass 10 Spielstände gespeichert werden.For example, if saving a game state requires 10KB each, the app might only allow the user store up to 10 games.
  • Verwenden Sie Roaming nicht für Daten, die von einer sofortigen Synchronisierung abhängig sind.Don't use roaming for data that relies on instant syncing. Windows garantiert keine sofortige Synchronisierung; die Synchronisierung kann erheblich verzögert werden, wenn Benutzer offline oder mit einem Netzwerk mit hoher Latenz verbunden sind.Windows doesn't guarantee an instant sync; roaming could be significantly delayed if a user is offline or on a high latency network. Stellen Sie sicher, dass die UI nicht von einer sofortigen Synchronisierung abhängig ist.Ensure that your UI doesn't depend on instant syncing.
  • Verwenden Sie Roaming nicht für häufig geänderte Daten.Don't use roaming for frequently changing data. Wenn Ihre App beispielsweise Informationen nachverfolgt, die sich häufig ändern (z. B. die Position eines Musiktitels in Sekunden), speichern Sie diese Daten nicht als Roaming-App-Daten.For example, if your app tracks frequently changing info, such as the position in a song by second, don't store this as roaming app data. Wählen Sie stattdessen eine weniger häufige angepasste Darstellung, die trotzdem eine gute Benutzererfahrung gewährleistet, z. B. den aktuell wiedergegebenen Titel.Instead, pick a less frequent representation that still provides a good user experience, like the currently playing song.

Voraussetzungen für RoamingRoaming pre-requisites

Jeder Benutzer kann von Roaming-App-Daten profitieren, wenn ein Microsoft-Konto zur Anmeldung am Gerät verwendet wird.Any user can benefit from roaming app data if they use a Microsoft account to log on to their device. Benutzer und Gruppenrichtlinienadministratoren haben jedoch die Möglichkeit, das Roaming von App-Daten auf einem Gerät zu deaktivieren.However, users and group policy administrators can switch off roaming app data on a device at any time. Benutzer, die kein Microsoft-Konto verwenden oder die Datenroamingfunktion deaktivieren, können Ihre App weiterhin verwenden, die App-Daten sind dann jedoch auf jedem Gerät lokal.If a user chooses not to use a Microsoft account or disables roaming data capabilities, she will still be able to use your app, but app data will be local to each device.

Daten, die im PasswordVault gespeichert sind, werden nur übertragen, wenn ein Benutzer ein Gerät als "vertrauenswürdig" eingestuft hat.Data stored in the PasswordVault will only transition if a user has made a device “trusted”. Wird einem Gerät nicht vertraut, werden die in diesem Tresor gespeicherten Daten nicht für das Roaming verwendet.If a device isn't trusted, data secured in this vault will not roam.

KonfliktauflösungConflict resolution

Das Roaming von App-Daten ist nicht für eine gleichzeitige Verwendung auf mehreren Geräten vorgesehenRoaming app data is not intended for simultaneous use on more than one device at a time. Wenn es während der Synchronisierung zu einem Konflikt kommt, weil eine bestimmte Dateneinheit auf beiden Geräten geändert wurde, verwendet das System vorzugsweise immer den zuletzt geschriebenen Wert.If a conflict arises during synchronization because a particular data unit was changed on two devices, the system will always favor the value that was written last. Dadurch wird sichergestellt, dass der App immer die aktuellsten Informationen zur Verfügung stehen.This ensures that the app utilizes the most up-to-date information. Handelt es sich bei der Dateneinheit um eine zusammengesetzte Einstellung, findet die Konfliktlösung trotzdem auf der Ebene der Einstellungseinheit statt, d. h. der zuletzt geänderte Wert der Zusammensetzung wird synchronisiert.If the data unit is a setting composite, conflict resolution will still occur on the level of the setting unit, which means that the composite with the latest change will be synchronized.

Zeitpunkt für das Schreiben von DatenWhen to write data

Je nach erwarteter Lebensdauer der Einstellung sollten Daten zu unterschiedlichen Zeitpunkten geschrieben werden.Depending on the expected lifetime of the setting, data should be written at different times. Selten bzw. langsam geänderte App-Daten sollten sofort geschrieben werden.Infrequently or slowly changing app data should be written immediately. Häufig geänderte App-Daten sollten dagegen nur in bestimmten Zeiträumen regelmäßig (beispielsweise einmal alle fünf Minuten) und bei angehaltener App geschrieben werden.However, app data that changes frequently should only be written periodically at regular intervals (such as once every 5 minutes), as well as when the app is suspended. So kann eine Musik-App beispielsweise die Einstellung für den aktuellen Titel schreiben, wenn ein neuer Titel wiedergegeben wird, aber die aktuelle Position im Titel sollte nur in angehaltenem Zustand der Anwendung geschrieben werden.For example, a music app might write the “current song” settings whenever a new song starts to play, however, the actual position in the song should only be written on suspend.

Schutz vor übermäßiger NutzungExcessive usage protection

Das System verfügt über verschiedene Schutzmechanismen, um unangemessene Verwendung der Ressourcen zu verhindern.The system has various protection mechanisms in place to avoid inappropriate use of resources. Falls App-Daten nicht wie erwartet übertragen werden, wurde das Gerät wahrscheinlich vorübergehend beschränkt.If app data does not transition as expected, it is likely that the device has been temporarily restricted. Wenn Sie einige Zeit warten, wird dieses Problem normalerweise automatisch behoben, ohne dass eine Aktion erforderlich ist.Waiting for some time will usually resolve this situation automatically and no action is required.

VersionsverwaltungVersioning

App-Daten können die Versionsinformationen nutzen, um von einer Datenstruktur auf eine andere zu aktualisieren.App data can utilize versioning to upgrade from one data structure to another. Die Versionsnummer unterscheidet sich von der App-Version und kann nach Belieben festgelegt werden.The version number is different from the app version and can be set at will. Auch wenn es nicht zwingend erforderlich ist, empfiehlt es sich, aufsteigende Versionsnummern zu verwenden, da beim Übergang zu einer kleineren Nummer, die neuere Daten darstellt, unerwünschte Komplikationen (z. B. Datenverluste) entstehen können.Although not enforced, it is highly recommended that you use increasing version numbers, since undesirable complications (including data loss)could occur if you try to transition to a lower data version number that represents newer data.

Das Roaming für App-Daten wird nur in installierten Apps mit der gleichen Versionsnummer durchgeführt.App data only roams between installed apps with the same version number. Beispiel: Geräte mit der Versionsnummer 2 tauschen Daten untereinander aus. Gleiches gilt für Geräte mit der Version 3. Es erfolgt jedoch kein Roaming zwischen Geräten mit Version 2 und Geräten mit Version 3.For example, devices on version 2 will transition data between each other and devices on version 3 will do the same, but no roaming will occur between a device running version 2 and a device running version 3. Wenn Sie eine neue App installieren, die auf anderen Geräten unterschiedliche Versionsnummern verwendet hat, synchronisiert die neu installierte App die App-Daten, die mit der höchsten Versionsnummer verknüpft sind.If you install a new app that utilized various version numbers on other devices, the newly installed app will sync the app data associated with the highest version number.

Tests und ToolsTesting and tools

Entwickler können ihr Gerät sperren, um eine Synchronisierung von Roaming-App-Daten auszulösen.Developers can lock their device in order to trigger a synchronization of roaming app data. Wenn die App-Daten scheinbar nicht innerhalb eines bestimmten Zeitrahmens übertragen werden, überprüfen Sie die folgenden Elemente, und stellen Sie sicher, dass:If it seems that the app data does not transition within a certain time frame, please check the following items and make sure that:

  • Ihre Roamingdaten nicht die maximal zulässige Größe überschreiten (siehe auch RoamingStorageQuota).Your roaming data does not exceed the maximum size (see RoamingStorageQuota for details).
  • Ihre Dateien geschlossen und ordnungsgemäß veröffentlicht wurden.Your files are closed and released properly.
  • Sie über mindestens zwei Geräte mit derselben App-Version verfügen.There are at least two devices running the same version of the app.

Registrieren, um Benachrichtigungen bei der Änderung von Roamingdaten zu erhaltenRegister to receive notification when roaming data changes

Um das Roaming von App-Daten verwenden zu können, müssen Sie die Roamingdatenänderungen registrieren und die Roamingdatencontainer abrufen, damit Sie Einstellungen lesen und schreiben können.To use roaming app data, you need to register for roaming data changes and retrieve the roaming data containers so you can read and write settings.

  1. Nehmen Sie eine Registrierung für den Empfang einer Benachrichtigung vor, wenn sich Roamingdaten ändern.Register to receive notification when roaming data changes.

    Das DataChanged-Ereignis benachrichtigt Sie, wenn sich Roamingdaten ändern.The DataChanged event notifies you when roaming data changes. In diesem Beispiel wird DataChangeHandler als Handler für Änderungen an Roamingdaten festgelegt.This example sets DataChangeHandler as the handler for roaming data changes.

void InitHandlers()
    {
       Windows.Storage.ApplicationData.Current.DataChanged += 
          new TypedEventHandler<ApplicationData, object>(DataChangeHandler);
    }

    void DataChangeHandler(Windows.Storage.ApplicationData appData, object o)
    {
       // TODO: Refresh your data
    }
  1. Rufen Sie die Container für die Einstellungen und Dateien der App ab.Get the containers for the app's settings and files.

    Rufen Sie mit der ApplicationData.RoamingSettings-Eigenschaft die Einstellungen und mit der ApplicationData.RoamingFolder-Eigenschaft die Dateien ab.Use the ApplicationData.RoamingSettings property to get the settings and the ApplicationData.RoamingFolder property to get the files.

Windows.Storage.ApplicationDataContainer roamingSettings = 
        Windows.Storage.ApplicationData.Current.RoamingSettings;
    Windows.Storage.StorageFolder roamingFolder = 
        Windows.Storage.ApplicationData.Current.RoamingFolder;

Erstellen und Abrufen von RoamingeinstellungenCreate and retrieve roaming settings

Verwenden Sie die ApplicationDataContainer.Values-Eigenschaft, um auf die Einstellungen im Container roamingSettings zuzugreifen, den wir im vorherigen Abschnitt abgerufen haben.Use the ApplicationDataContainer.Values property to access the settings in the roamingSettings container we got in the previous section. In diesem Beispiel wird eine einfache Einstellung namens exampleSetting und ein zusammengesetzter Wert namens composite erstellt.This example creates a simple setting named exampleSetting and a composite value named composite.

// Simple setting

roamingSettings.Values["exampleSetting"] = "Hello World";
// High Priority setting, for example, last page position in book reader app
roamingSettings.values["HighPriority"] = "65";

// Composite setting

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

roamingSettings.Values["exampleCompositeSetting"] = composite;

Dieses Beispiel ruft die gerade erstellten Einstellungen ab.This example retrieves the settings we just created.

// Simple setting

Object value = roamingSettings.Values["exampleSetting"];

// Composite setting

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

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

Erstellen und Abrufen von RoamingdateienCreate and retrieve roaming files

Verwenden Sie die Datei-APIs, z. B. Windows.Storage.StorageFolder.CreateFileAsync und Windows.Storage.FileIO.WriteTextAsync, um eine Datei im Roamingspeicher für App-Daten zu erstellen und zu aktualisieren.To create and update a file in the roaming app data store, use the file APIs, such as Windows.Storage.StorageFolder.CreateFileAsync and Windows.Storage.FileIO.WriteTextAsync. In diesem Beispiel wird im Container roamingFolder die Datei dataFile.txt erstellt, in die das aktuelle Datum und die Uhrzeit geschrieben werden.This example creates a file named dataFile.txt in the roamingFolder container and writes the current date and time to the file. Der Wert ReplaceExisting aus der CreationCollisionOption-Enumeration gibt an, dass die Datei ersetzt werden soll, falls sie bereits vorhanden ist.The ReplaceExisting value from the CreationCollisionOption enumeration indicates to replace the file if it already exists.

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

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

Verwenden Sie die Datei-APIs, z. B. Windows.Storage.StorageFolder.GetFileAsync, Windows.Storage.StorageFile.GetFileFromApplicationUriAsync und Windows.Storage.FileIO.ReadTextAsync, um eine Datei im Roamingspeicher für App-Daten zu öffnen und zu lesen.To open and read a file in the roaming app data store, use the file APIs, such as Windows.Storage.StorageFolder.GetFileAsync, Windows.Storage.StorageFile.GetFileFromApplicationUriAsync, and Windows.Storage.FileIO.ReadTextAsync. In diesem Beispiel wird die im vorherigen Abschnitt erstellte Datei dataFile.txt geöffnet und das Datum aus der Datei gelesen.This example opens the dataFile.txt file created in the previous section and reads the date from the file. Einzelheiten zum Laden von Dateiressourcen aus verschiedenen Speicherorten finden Sie unter So wird's gemacht: Laden von Dateiressourcen.For details on loading file resources from various locations, see How to load file resources.

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

Temporäre App-DatenTemporary app data

Der temporäre App-Datenspeicher funktioniert wie ein Cache.The temporary app data store works like a cache. Für diese Dateien erfolgt kein Roaming, und sie können jederzeit gelöscht werden.Its files do not roam and could be removed at any time. Daten, die an diesem Speicherort gespeichert werden, können von der Aufgabe zur Systemverwaltung jederzeit automatisch gelöscht werden.The System Maintenance task can automatically delete data stored at this location at any time. Benutzer können Dateien im temporären Datenspeicher auch mit der Datenträgerbereinigung löschen.The user can also clear files from the temporary data store using Disk Cleanup. Temporäre App-Daten können zum Speichern temporärer Informationen während einer App-Sitzung verwendet werden.Temporary app data can be used for storing temporary information during an app session. Es gibt jedoch keine Garantie dafür, dass diese Daten über die App-Sitzung hinaus beibehalten werden, da der verwendete Speicherplatz ggf. vom System zurückgefordert wird.There is no guarantee that this data will persist beyond the end of the app session as the system might reclaim the used space if needed. Der Speicherort ist über die temporaryFolder-Eigenschaft verfügbar.The location is available via the temporaryFolder property.

Abrufen des temporären DatencontainersRetrieve the temporary data container

Rufen Sie die Dateien mit der ApplicationData.TemporaryFolder-Eigenschaft ab.Use the ApplicationData.TemporaryFolder property to get the files. In den nächsten Schritten wird die temporaryFolder-Variable aus diesem Schritt verwendet.The next steps use the temporaryFolder variable from this step.

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

Erstellen und Lesen von temporären DateienCreate and read temporary files

Verwenden Sie die Datei-APIs, z. B. Windows.Storage.StorageFolder.CreateFileAsync und Windows.Storage.FileIO.WriteTextAsync, um eine Datei im temporären App-Datenspeicher zu erstellen und zu aktualisieren.To create and update a file in the temporary app data store, use the file APIs, such as Windows.Storage.StorageFolder.CreateFileAsync and Windows.Storage.FileIO.WriteTextAsync. In diesem Beispiel wird im Container temporaryFolder die Datei dataFile.txt erstellt, in die das aktuelle Datum und die Uhrzeit geschrieben werden.This example creates a file named dataFile.txt in the temporaryFolder container and writes the current date and time to the file. Der Wert ReplaceExisting aus der CreationCollisionOption-Enumeration gibt an, dass die Datei ersetzt werden soll, falls sie bereits vorhanden ist.The ReplaceExisting value from the CreationCollisionOption enumeration indicates to replace the file if it already exists.

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

Verwenden Sie die Datei-APIs, z. B. Windows.Storage.StorageFolder.GetFileAsync, Windows.Storage.StorageFile.GetFileFromApplicationUriAsync und Windows.Storage.FileIO.ReadTextAsync, um eine Datei im temporären App-Datenspeicher zu öffnen und zu lesen.To open and read a file in the temporary app data store, use the file APIs, such as Windows.Storage.StorageFolder.GetFileAsync, Windows.Storage.StorageFile.GetFileFromApplicationUriAsync, and Windows.Storage.FileIO.ReadTextAsync. In diesem Beispiel wird die im vorherigen Schritt erstellte Datei dataFile.txt geöffnet und das Datum aus der Datei gelesen.This example opens the dataFile.txt file created in the previous step and reads the date from the file. Einzelheiten zum Laden von Dateiressourcen aus verschiedenen Speicherorten finden Sie unter So wird's gemacht: Laden von Dateiressourcen.For details on loading file resources from various locations, see How to load file resources.

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

Organisieren von App-Daten mit ContainernOrganize app data with containers

Um Ihre Einstellungen für App-Daten und Dateien strukturiert zu speichern, erstellen Sie Container (dargestellt durch ApplicationDataContainer-Objekte), statt direkt mit Verzeichnissen zu arbeiten.To help you organize your app data settings and files, you create containers (represented by ApplicationDataContainer objects) instead of working directly with directories. Sie können Container zu den lokalen, Roaming- und temporären App-Datenspeichern hinzufügen.You can add containers to the local, roaming, and temporary app data stores. Container können in bis zu 32 Ebenen geschachtelt werden.Containers can be nested up to 32 levels deep.

Rufen Sie die ApplicationDataContainer.CreateContainer-Methode auf, um einen Einstellungscontainer zu erstellen.To create a settings container, call the ApplicationDataContainer.CreateContainer method. In diesem Beispiel wird ein lokaler Einstellungscontainer namens exampleContainer erstellt und eine Einstellung namens exampleSetting hinzugefügt.This example creates a local settings container named exampleContainer and adds a setting named exampleSetting. Der Wert Always aus der ApplicationDataCreateDisposition-Enumeration gibt an, dass der Container erstellt wird, sofern er noch nicht vorhanden ist.The Always value from the ApplicationDataCreateDisposition enumeration indicates that the container is created if it doesn't already exist.

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

Löschen von App-Einstellungen und ContainernDelete app settings and containers

Verwenden Sie die ApplicationDataContainerSettings.Remove-Methode, um eine einfache Einstellung zu löschen, die Ihre App nicht mehr benötigt.To delete a simple setting that your app no longer needs, use the ApplicationDataContainerSettings.Remove method. In diesem Beispiel wird die zuvor erstellte, lokale exampleSetting-Einstellung gelöscht.This example deletesthe exampleSetting local setting that we created earlier.

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

Verwenden Sie die ApplicationDataCompositeValue.Remove-Methode, um eine zusammengesetzte Einstellung zu löschen.To delete a composite setting, use the ApplicationDataCompositeValue.Remove method. In diesem Beispiel wird die lokale, zusammengesetzte exampleCompositeSetting-Einstellung gelöscht, die in einem früheren Beispiel erstellt wurde.This example deletes the local exampleCompositeSetting composite setting we created in an earlier example.

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

Rufen Sie die ApplicationDataContainer.DeleteContainer-Methode auf, um einen Container zu löschen.To delete a container, call the ApplicationDataContainer.DeleteContainer method. In diesem Beispiel wird der zuvor erstellte, lokale exampleContainer-Einstellungscontainer gelöscht.This example deletes the local exampleContainer settings container we created earlier.

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

// Delete container

localSettings.DeleteContainer("exampleContainer");

Versionsverwaltung Ihrer App-DatenVersioning your app data

Optional können Sie die App-Daten für Ihre App mit einer Versionsnummer versehen.You can optionally version the app data for your app. In diesem Fall können Sie neue Versionen der betreffenden App erstellen, mit denen das Format der App-Daten geändert wird, ohne dass es dadurch zu Kompatibilitätsproblemen mit der Vorgängerversion der App kommt.This would enable you to create a future version of your app that changes the format of its app data without causing compatibility problems with the previous version of your app. Die App prüft die Version der App-Daten im Dateispeicher. Handelt es sich um eine niedrigere Version als erwartet, aktualisiert die App sowohl die Anwendungsdaten auf das neue Format als auch die Version.The app checks the version of the app data in the data store, and if the version is less than the version the app expects, the app should update the app data to the new format and update the version. Weitere Informationen finden Sie in den Artikeln zur Application.Version-Eigenschaft und zur ApplicationData.SetVersionAsync-Methode.For more info, see the Application.Version property and the ApplicationData.SetVersionAsync method.