設定と他のアプリ データを保存して取得するStore and retrieve settings and other app data

アプリ データとは、特定のアプリに固有の実行可能データです。App data is mutable data that is specific to a particular app. ランタイム状態、ユーザー設定、その他の設定などがあります。It includes runtime state, user preferences, and other settings. アプリ データはユーザー データとは異なり、アプリを使用しているときに、ユーザーが作成、管理するデータです。App data is different from user data, data that the user creates and manages when using an app. ユーザー データには、ドキュメント ファイル、メディア ファイル、メール トランスクリプト、通信トランスクリプト、ユーザーが作成したコンテンツを保持するデータベース レコードなどがあります。User data includes document or media files, email or communication transcripts, or database records holding content created by the user. ユーザー データは複数のアプリで有効な場合があります。User data may be useful or meaningful to more than one app. 多くの場合、ユーザー データは、ユーザーがアプリ自体とは無関係にエンティティとして操作または転送するデータ (ドキュメントなど) です。Often, this is data that the user wants to manipulate or transmit as an entity independent of the app itself, such as a document.

アプリのデータについての重要な注意事項: アプリ データの有効期間はアプリの有効期間に依存します。Important note about app data: The lifetime of the app data is tied to the lifetime of the app. アプリが削除されると、すべてのアプリ データが失われます。If the app is removed, all of the app data will be lost as a consequence. ユーザー データや、ユーザーにとって欠かすことができない重要なデータの保存には、アプリ データを使用しないでください。Don't use app data to store user data or anything that users might perceive as valuable and irreplaceable. そのような情報の保存には、ユーザーのライブラリや Microsoft OneDrive を使用することをお勧めします。We recommend that the user's libraries and Microsoft OneDrive be used to store this sort of information. アプリ データは、アプリ固有のユーザー設定、設定、お気に入りを保存するのに適しています。App data is ideal for storing app-specific user preferences, settings, and favorites.

アプリ データの種類Types of app data

アプリ データには、設定とファイルの 2 種類があります。There are two types of app data: settings and files.

  • 設定Settings

    設定を使用して、ユーザー設定やとアプリケーションの状態情報を保存します。Use settings to store user preferences and application state info. アプリ データ API を使用して、設定をを簡単に作成して取得できます (この記事の後半でいくつかの例を紹介します)。The app data API enables you to easily create and retrieve settings (we'll show you some examples later in this article).

    アプリの設定に使用できるデータ型を次に示します。Here are data types you can use for app settings:

    • UInt8Int16UInt16Int32UInt32Int64UInt64SingleDoubleUInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single, Double
    • ブール値Boolean
    • Char16StringChar16, String
    • DateTime TimeSpanDateTime, TimeSpan
    • GUIDPointSizeRectGUID, Point, Size, Rect
    • ApplicationDataCompositeValue:一連の関連アプリ設定をシリアル化し、アトミックに逆シリアル化する必要があります。ApplicationDataCompositeValue: A set of related app settings that must be serialized and deserialized atomically. コンポジット設定を使うと、相互に依存する設定のアトミックな更新が簡単になります。Use composite settings to easily handle atomic updates of interdependent settings. 同時アクセスとローミング時は、システムによってコンポジット設定の整合性が保たれます。The system ensures the integrity of composite settings during concurrent access and roaming. コンポジット設定は少量のデータに適しており、大きなデータ セットに使うとパフォーマンスが低下する場合があります。Composite settings are optimized for small amounts of data, and performance can be poor if you use them for large data sets.
  • ファイルFiles

    ファイルを使うと、バイナリ データを保存したり、独自にカスタマイズされ、シリアル化された型を有効にできます。Use files to store binary data or to enable your own, customized serialized types.

アプリのデータ ストアにアプリ データを保存するStoring app data in the app data stores

アプリのインストール時には、設定やファイル用に、ユーザーごとの固有のデータ ストアが設定されます。When an app is installed, the system gives it its own per-user data stores for settings and files. 物理的ストレージはシステムによって管理されるため、このデータの場所や形式を意識することなく、データは他のアプリやユーザーから確実に分離されます。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. また、アプリに更新プログラムをインストールするときはデータ ストアの内容が保持され、アプリのアンインストール時にはデータ ストアの内容が完全に削除されます。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.

各アプリのデータ ストア内には、ローカル ファイル用、ローミング ファイル用、一時ファイル用に 1 つずつ、システム定義のルート ディレクトリがあります。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. それぞれのルート ディレクトリに新しいファイルや新しいコンテナーをアプリで追加できます。Your app can add new files and new containers to each of these root directories.

ローカル アプリ データLocal app data

ローカル アプリ データは、アプリ セッション間で保持する必要がある情報のうち、ローミング アプリ データには適していないものに使用されます。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. また、他のデバイスには適さないデータもここに格納します。Data that is not applicable on other devices should be stored here as well. ローカルに格納されるデータには、一般的なサイズの制限はありません。There is no general size restriction on local data stored. ローカル アプリ データ ストアは、ローミングに適さないデータや、大きなデータ セットに使用してください。Use the local app data store for data that it does not make sense to roam and for large data sets.

ローカル アプリ データ ストアを取得するRetrieve the local app data store

ローカル アプリ データを読み書きする前に、ローカル アプリ データ ストアを取得する必要があります。Before you can read or write local app data, you must retrieve the local app data store. ローカル アプリ データ ストアを取得するには、ApplicationData.LocalSettings プロパティを使用して、アプリのローカル設定を ApplicationDataContainer オブジェクトとして取得します。To retrieve the local app data store, use the ApplicationData.LocalSettings property to get the app's local settings as an ApplicationDataContainer object. StorageFolder オブジェクト内のファイルを取得するには、ApplicationData.LocalFolder プロパティを使用します。Use the ApplicationData.LocalFolder property to get the files in a StorageFolder object. バックアップや復元に含まれていないファイルを保存できるローカル アプリ データ ストア内のフォルダーを取得するには、ApplicationData.LocalCacheFolder プロパティを使用します。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;

簡易ローカル設定を作成して取得するCreate and retrieve a simple local setting

設定を作成または書き込むには、ApplicationDataContainer.Values プロパティを使用して、前の手順で取得した localSettings コンテナー内の設定にアクセスします。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. 次の例では、exampleSetting という名前の設定を作成します。This example creates a setting named exampleSetting.

// Simple setting

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

設定を取得するには、設定を作成したときに使ったものと同じ ApplicationDataContainer.Values プロパティを使います。To retrieve the setting, you use the same ApplicationDataContainer.Values property that you used to create the setting. この例では作成した設定を取得する方法を示しています。This example shows how to retrieve the setting we just created.

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

ローカル コンポジット値を作成して取得するCreate and retrieve a local composite value

コンポジット値を作成または書き込むには、ApplicationDataCompositeValue オブジェクトを作成します。To create or write a composite value, create an ApplicationDataCompositeValue object. 次の例では、exampleCompositeSetting という名前のコンポジット設定を作成し、localSettings コンテナーに追加します。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;

この例では作成したコンポジット値を取得する方法を示しています。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"]
}

ローカル ファイルを作成して読み取るCreate and read a local file

ローカル アプリ データ ストアにファイルを作成して更新するには、Windows.Storage.StorageFolder.CreateFileAsyncWindows.Storage.FileIO.WriteTextAsync などのファイル API を使用します。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. 次の例では、localFolder コンテナーに dataFile.txt という名前のファイルを作成し、現在の日付と時刻をファイルに書き込みます。This example creates a file named dataFile.txt in the localFolder container and writes the current date and time to the file. CreationCollisionOption 列挙体の ReplaceExisting 値は、ファイルが既にある場合にファイルを置き換えることを示します。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));
}

ローカル アプリ データ ストアのファイルを開いて読み取るには、Windows.Storage.StorageFolder.GetFileAsyncWindows.Storage.StorageFile.GetFileFromApplicationUriAsyncWindows.Storage.FileIO.ReadTextAsync などのファイル API を使用します。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. この例では、前の手順で作成した dataFile.txt ファイルを開き、ファイルから日付を読み取ります。This example opens the dataFile.txt file created in the previous step and reads the date from the file. さまざまな場所からファイル リソースを読み込む方法について詳しくは、「ファイル リソースを読み込む方法」をご覧ください。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
   }
}

ローミング データRoaming data

アプリでローミング データを使用すると、複数のデバイス間でアプリ データを簡単に同期することができます。If you use roaming data in your app, your users can easily keep your app's app data in sync across multiple devices. アプリを複数のデバイス上にインストールすると、OS によってアプリ データの同期が維持されるため、2 つ目のデバイス上でユーザーが行うアプリのセットアップ作業が軽減されます。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. またローミングを使うと、異なるデバイス上でも、一覧の作成などの作業を中断したときの状態から再開することができます。Roaming also enables your users to continue a task, such as composing a list, right where they left off even on a different device. ローミング データが更新されると、OS によってクラウドにレプリケートされ、アプリがインストールされている別のデバイスに同期されます。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.

各アプリでローミングできるアプリ データのサイズには OS による制限があります。The OS limits the size of the app data that each app may roam. ApplicationData.RoamingStorageQuota」をご覧ください。See ApplicationData.RoamingStorageQuota. この制限に達した場合、アプリでローミングされたアプリ データの合計が制限値未満に戻るまで、そのアプリのアプリ データはクラウドにまったくレプリケートされません。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. このため、ローミング データは、ユーザー設定、リンク、小さなデータ ファイルのみに使うことをお勧めします。For this reason, it is a best practice to use roaming data only for user preferences, links, and small data files.

アプリのローミング データは、一定の時間間隔内にユーザーがいずれかのデバイスからアクセスしている限り、クラウドに保持されます。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. この時間間隔内にアプリが実行されないと、そのローミング データはクラウドから削除されます。If the user does not run an app for longer than this time interval, its roaming data is removed from the cloud. ユーザーがアプリをアンインストールしても、そのローミング データがクラウドから自動的に削除されることはなく、保持されます。If a user uninstalls an app, its roaming data isn't automatically removed from the cloud, it's preserved. 時間間隔内にユーザーがアプリを再インストールすると、ローミング データがクラウドから同期されます。If the user reinstalls the app within the time interval, the roaming data is synchronized from the cloud.

データのローミングの推奨事項と非推奨事項Roaming data do's and don'ts

  • ユーザーの基本設定やカスタマイズ、リンク、小さなデータ ファイルにローミングを使います。Use roaming for user preferences and customizations, links, and small data files. たとえば、ローミングを使って、ユーザーの背景色の基本設定をすべてのデバイスで保持します。For example, use roaming to preserve a user's background color preference across all devices.
  • ユーザーがデバイス間で作業を続けられるようにローミングを使います。Use roaming to let users continue a task across devices. たとえば、下書きしたメールの内容やリーダー アプリで最近表示したページなどのアプリ データをローミングします。For example, roam app data like the contents of an drafted email or the most recently viewed page in a reader app.
  • アプリ データを更新して、DataChanged イベントを処理します。Handle the DataChanged event by updating app data. このイベントは、クラウドからのアプリ データの同期が完了したときに発生します。This event occurs when app data has just finished syncing from the cloud.
  • 生データではなくコンテンツへの参照をローミングします。Roam references to content rather than raw data. たとえば、オンライン記事のコンテンツではなく URL をローミングします。For example, roam a URL rather than the content of an online article.
  • タイム クリティカルな重要な設定に対しては、RoamingSettings に関連付けられた HighPriority 設定を使います。For important, time critical settings, use the HighPriority setting associated with RoamingSettings.
  • デバイス固有のアプリ データをローミングしないでください。Don't roam app data that is specific to a device. ローカルにあるファイル リソースのパス名など、ローカルのみに関連した情報もあります。Some info is only pertinent locally, such as a path name to a local file resource. ローカル情報をローミングする場合は、その情報が別のデバイスで無効なときにアプリを回復できることを確認してください。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.
  • 大量のアプリ データをローミングしないでください。Don't roam large sets of app data. アプリでローミングできるアプリ データの量には制限があります。この最大値を取得するには、RoamingStorageQuota プロパティを使ってください。There's a limit to the amount of app data an app may roam; use RoamingStorageQuota property to get this maximum. この制限に達した場合、アプリ データのサイズが制限を下回るまで、データはローミングできません。If an app hits this limit, no data can roam until the size of the app data store no longer exceeds the limit. アプリを設計する際は、この制限を超えないようにサイズの大きいデータをどのように制限するかを検討してください。When you design your app, consider how to put a bound on larger data so as to not exceed the limit. たとえば、ゲームの状態を保存するのにそれぞれ 10 KB 必要になる場合は、ユーザーによる保存を 10 ゲームまでに制限したりすると効果的です。For example, if saving a game state requires 10KB each, the app might only allow the user store up to 10 games.
  • 即時同期に依存するデータにローミングを使わないでください。Don't use roaming for data that relies on instant syncing. Windows では即時同期が保証されません。ユーザーがオフラインであったり、待ち時間の長いネットワークを使っている場合、ローミングはかなり遅れる可能性があります。Windows doesn't guarantee an instant sync; roaming could be significantly delayed if a user is offline or on a high latency network. UI が即時同期に依存しないことを確認してください。Ensure that your UI doesn't depend on instant syncing.
  • 頻繁に変更されるデータのローミングを使用しないでください。Don't use roaming for frequently changing data. たとえば、再生中の曲の秒刻みの位置など、頻繁に変更される情報を追跡する場合は、この情報をローミング アプリ データとして保存しないでください。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. 代わりに、現在再生中の曲など、変更の頻度が少なく、ユーザー エクスペリエンスも損なわないような情報を利用します。Instead, pick a less frequent representation that still provides a good user experience, like the currently playing song.

ローミングの前提条件Roaming pre-requisites

アプリ データのローミングは、Microsoft アカウントを使ってデバイスにログインするすべてのユーザーに利点をもたらします。Any user can benefit from roaming app data if they use a Microsoft account to log on to their device. ただし、いつでもデバイスでアプリ データのローミングを切り替えることができるのは、ユーザーとグループ ポリシーの管理者です。However, users and group policy administrators can switch off roaming app data on a device at any time. ユーザーは、Microsoft アカウントを使用しないように選択またはローミング データの機能を無効にします。、アプリを使用して、彼女はできますが、アプリ データは、各デバイスにローカルになります。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.

PasswordVault に格納されているデータは、ユーザーが "信頼" しているデバイスにしか移行されません。Data stored in the PasswordVault will only transition if a user has made a device “trusted”. デバイスが信頼されていない場合、この資格情報コンテナーのセキュリティで確保されているデータはローミングされません。If a device isn't trusted, data secured in this vault will not roam.

競合の解決Conflict resolution

アプリ データのローミングは、複数のデバイスでの同時使用を想定していません。Roaming app data is not intended for simultaneous use on more than one device at a time. 2 台のデバイスで特定のデータ単位が変更されたことが原因で同期中に競合が発生した場合、最後に書き込まれた値が常に優先されます。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. これにより、アプリで最新の情報が利用されます。This ensures that the app utilizes the most up-to-date information. データ単位が設定コンポジットの場合、競合の解決は設定の単位で行われ、最新の変更を含むコンポジットが同期されます。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.

データを書き込むタイミングWhen to write data

想定される設定の有効期間に応じて、データを書き込むタイミングを変える必要があります。Depending on the expected lifetime of the setting, data should be written at different times. 変更の頻度が低いアプリ データや変更間隔の長いアプリ データは、変更されたらすぐに書き込むようにします。Infrequently or slowly changing app data should be written immediately. ただし、頻繁に変更されるアプリ データは、アプリが中断されたとき以外は、一定の間隔 (5 分に 1 回など) でのみ書き込むようにします。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. たとえば、音楽アプリでは、"現在の曲" の設定は新しい曲の再生が始まるたびに書き込みますが、曲の途中の実際の位置は中断したときにのみ書き込みます。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.

使いすぎに対する保護Excessive usage protection

リソースの不適切な使用を防止するために、システムにはさまざまな保護メカニズムが備わっています。The system has various protection mechanisms in place to avoid inappropriate use of resources. アプリ データが想定どおりに移行されない場合は、デバイスが一時的に制限されていることが考えられます。If app data does not transition as expected, it is likely that the device has been temporarily restricted. 通常、この状況はしばらくすると自動的に解決されるため、操作は必要ありません。Waiting for some time will usually resolve this situation automatically and no action is required.

バージョンVersioning

アプリ データは、バージョンに基づいてデータ構造をアップグレードできます。App data can utilize versioning to upgrade from one data structure to another. バージョン番号は、アプリのバージョンとは別の番号で、自由に設定することができます。The version number is different from the app version and can be set at will. 強制ではありませんが、バージョン番号は新しいデータほど大きくすることを強くお勧めします。新しいデータを表すバージョン番号が小さくなると、データ損失などの望ましくない問題が発生する可能性があります。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.

アプリ データのローミングは、バージョン番号が同じインストールされたアプリの間でしか行われません。App data only roams between installed apps with the same version number. たとえば、どちらもバージョン 2 のデバイスの間やどちらもバージョン 3 のデバイスの間ではデータが移行されますが、バージョン 2 を実行中のデバイスとバージョン 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. 他のデバイスでさまざまなバージョン番号を利用していたアプリを新たにインストールする場合、新たにインストールしたアプリは、最も大きいバージョン番号と関連付けられているアプリ データを同期します。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.

テストとツールTesting and tools

開発者は、ローミング アプリ データの同期をトリガーするためにデバイスをロックできます。Developers can lock their device in order to trigger a synchronization of roaming app data. 一定の期間にわたってアプリ データが移行されていない場合は、次の点を確認してください。If it seems that the app data does not transition within a certain time frame, please check the following items and make sure that:

  • ローミング データが最大サイズを超えていないこと (詳しくは、「RoamingStorageQuota」をご覧ください)。Your roaming data does not exceed the maximum size (see RoamingStorageQuota for details).
  • ファイルが閉じていて、適切に解放されていること。Your files are closed and released properly.
  • 同じバージョンのアプリを実行しているデバイスが 2 台以上あること。There are at least two devices running the same version of the app.

ローミング データが変更された場合に通知を受け取るように登録するRegister to receive notification when roaming data changes

アプリのローミング データを使用するには、ローミング データの変更に備えて登録し、設定を読み書きできるように、ローミング データのコンテナーを取得する必要があります。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. ローミング データが変更されたときに通知を受け取るように登録します。Register to receive notification when roaming data changes.

    DataChanged イベントで、ローミング データが変更されたときに通知します。The DataChanged event notifies you when roaming data changes. この例では、ローミング データの変更のハンドラーとして DataChangeHandler を設定します。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. アプリの設定とファイルのコンテナーを取得します。Get the containers for the app's settings and files.

    設定を取得するには ApplicationData.RoamingSettings プロパティを、ファイルを取得するには ApplicationData.RoamingFolder プロパティを使用します。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;

ローミング設定を作成して取得するCreate and retrieve roaming settings

前のセクションで取得した roamingSettings コンテナー内の設定にアクセスするには、ApplicationDataContainer.Values プロパティを使用します。Use the ApplicationDataContainer.Values property to access the settings in the roamingSettings container we got in the previous section. 次の例では、exampleSetting という名前の簡易設定と、composite という名前のコンポジット値を作成します。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;

この例では作成した設定を取得します。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"]
}

ローミング ファイルを作成して取得するCreate and retrieve roaming files

ローミング アプリ データ ストアでファイルを作成して更新するには、Windows.Storage.StorageFolder.CreateFileAsyncWindows.Storage.FileIO.WriteTextAsync などのファイル API を使用します。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. 次の例では、roamingFolder コンテナーに dataFile.txt という名前のファイルを作成し、現在の日付と時刻をファイルに書き込みます。This example creates a file named dataFile.txt in the roamingFolder container and writes the current date and time to the file. CreationCollisionOption 列挙体の ReplaceExisting 値は、ファイルが既にある場合にファイルを置き換えることを示します。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));
}

ローミング アプリ データ ストアのファイルを開いて読み取るには、Windows.Storage.StorageFolder.GetFileAsyncWindows.Storage.StorageFile.GetFileFromApplicationUriAsyncWindows.Storage.FileIO.ReadTextAsync などのファイル API を使用します。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. この例では、前のセクションで作成した dataFile.txt ファイルを開き、ファイルから日付を読み取ります。This example opens the dataFile.txt file created in the previous section and reads the date from the file. さまざまな場所からファイル リソースを読み込む方法について詳しくは、「ファイル リソースを読み込む方法」をご覧ください。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
   }
}

一時アプリ データTemporary app data

一時アプリ データ ストアは、キャッシュのような働きをします。The temporary app data store works like a cache. ファイルはローミングされず、任意の時点で削除されます。Its files do not roam and could be removed at any time. システム メンテナンス タスクを使うと、この場所に格納されているデータをいつでも自動的に削除できます。The System Maintenance task can automatically delete data stored at this location at any time. ディスク クリーンアップを使って、一時データ ストアからファイルを削除することもできます。The user can also clear files from the temporary data store using Disk Cleanup. 一時アプリ データは、アプリ セッションの一時的な情報の格納に使うことができます。Temporary app data can be used for storing temporary information during an app session. このデータは、アプリ セッションの終了後に保持されるという保証はありません。必要に応じて使用領域が再利用されます。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. この場所には、temporaryFolder プロパティを使ってアクセスできます。The location is available via the temporaryFolder property.

一時データコンテナーを取得するRetrieve the temporary data container

ファイルを取得するには ApplicationData.TemporaryFolder プロパティを使用します。Use the ApplicationData.TemporaryFolder property to get the files. 以降の手順では、この手順の temporaryFolder 変数を使用します。The next steps use the temporaryFolder variable from this step.

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

一時ファイルを作成して読み取るCreate and read temporary files

一時アプリ データ ストアにファイルを作成して更新するには、Windows.Storage.StorageFolder.CreateFileAsyncWindows.Storage.FileIO.WriteTextAsync などのファイル API を使用します。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. 次の例では、temporaryFolder コンテナーに dataFile.txt という名前のファイルを作成し、現在の日付と時刻をファイルに書き込みます。This example creates a file named dataFile.txt in the temporaryFolder container and writes the current date and time to the file. CreationCollisionOption 列挙体の ReplaceExisting 値は、ファイルが既にある場合にファイルを置き換えることを示します。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));
}

一時アプリ データ ストアのファイルを開いて読み取るには、Windows.Storage.StorageFolder.GetFileAsyncWindows.Storage.StorageFile.GetFileFromApplicationUriAsyncWindows.Storage.FileIO.ReadTextAsync などのファイル API を使用します。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. この例では、前の手順で作成した dataFile.txt ファイルを開き、ファイルから日付を読み取ります。This example opens the dataFile.txt file created in the previous step and reads the date from the file. さまざまな場所からファイル リソースを読み込む方法について詳しくは、「ファイル リソースを読み込む方法」をご覧ください。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
   }
}

コンテナーでアプリ データを整理するOrganize app data with containers

アプリ データの設定とファイルを整理するには、ディレクトリで直接作業するのではなく、コンテナー (ApplicationDataContainer オブジェクトで表されます) を作成します。To help you organize your app data settings and files, you create containers (represented by ApplicationDataContainer objects) instead of working directly with directories. コンテナーは、ローカル アプリ データ ストア、ローミング アプリ データ ストア、一時アプリ データ ストアに追加できます。You can add containers to the local, roaming, and temporary app data stores. コンテナーは 32 階層まで入れ子にすることができます。Containers can be nested up to 32 levels deep.

設定コンテナーを作成するには、ApplicationDataContainer.CreateContainer メソッドを呼び出します。To create a settings container, call the ApplicationDataContainer.CreateContainer method. 次の例では、exampleContainer という名前のローカル設定コンテナーを作成し、exampleSetting という名前の設定を追加します。This example creates a local settings container named exampleContainer and adds a setting named exampleSetting. ApplicationDataCreateDisposition 列挙体の Always 値は、コンテナーがまだない場合に作成されることを示します。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";
}

アプリの設定とコンテナーを削除するDelete app settings and containers

アプリでもう必要のない簡易設定を削除するには、ApplicationDataContainerSettings.Remove メソッドを使用します。To delete a simple setting that your app no longer needs, use the ApplicationDataContainerSettings.Remove method. この例では、前の手順で作成した exampleSetting ローカル設定を削除します。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");

コンポジット設定を削除するには、ApplicationDataCompositeValue.Remove メソッドを使用します。To delete a composite setting, use the ApplicationDataCompositeValue.Remove method. この例では、前の例で作成したローカルの exampleCompositeSetting コンポジット設定を削除します。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");

コンテナーを削除するには、ApplicationDataContainer.DeleteContainer メソッドを呼び出します。To delete a container, call the ApplicationDataContainer.DeleteContainer method. この例では、前の手順で作成したローカルの exampleContainer 設定コンテナーを削除します。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");

アプリ データのバージョン管理Versioning your app data

必要に応じて、アプリのアプリ データをバージョン管理することもできます。You can optionally version the app data for your app. これにより、将来作成するアプリのバージョンでアプリ データの形式を変更しても、以前のバージョンとの互換性に問題が起こりません。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. データ ストア内のアプリ データのバージョンをアプリが確認し、以前のバージョンであった場合、アプリ データは新しい形式に更新され、バージョンも更新されます。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. 詳しくは、「Application.Version プロパティ」と「ApplicationData.SetVersionAsync メソッド」をご覧ください。For more info, see theApplication.Version property and the ApplicationData.SetVersionAsync method.