重要な API
StorageFile.IsAvailable プロパティを使用して、Microsoft OneDrive ファイルを使用できるかどうかを確認します。
[前提条件]
ユニバーサル Windows プラットフォーム (UWP) アプリの非同期プログラミングについて
C# または Visual Basic で非同期アプリを記述する方法については、「C# または Visual Basicでの非同期 API の呼び出し
に関するページを参照してください。 C++ で非同期アプリを記述する方法については、「C++での非同期プログラミング」を参照してください。 アプリ機能の宣言
ファイル アクセス許可
を参照してください。
StorageFile.IsAvailable プロパティの使用
ユーザーは、OneDrive ファイルを使用可能なオフライン (既定) またはオンライン専用としてマークできます。 この機能を使用すると、ユーザーは大きなファイル (画像やビデオなど) を OneDrive に移動し、オンライン専用としてマークし、ディスク領域を節約できます (ローカルに保持されるのはメタデータ ファイルだけです)。
StorageFile.IsAvailable は、ファイルが現在使用できるかどうかを判断するために使用されます。 次の表は、さまざまなシナリオでの StorageFile.IsAvailable プロパティの値を示しています。
ファイルのタイプ | オンライン | 従量制課金ネットワーク | オフライン |
---|---|---|---|
ローカル ファイル | 正しい | 正しい | 正しい |
使用可能なオフラインとしてマークされた OneDrive ファイル | 正しい | 正しい | 正しい |
オンライン専用としてマークされた OneDrive ファイル | 正しい | ユーザー設定に基づく | いいえ |
ネットワーク ファイル | 正しい | ユーザー設定に基づく | いいえ |
次の手順は、ファイルが現在使用できるかどうかを判断する方法を示しています。
- アクセスするライブラリに適した機能を宣言します。
- Windows.Storage 名前空間を含めます。 この名前空間には、ファイル、フォルダー、およびアプリケーション設定を管理するための型が含まれています。 また、必要な StorageFile 型も含まれます。
- 目的のファイルの StorageFile オブジェクトを取得します。 ライブラリを列挙する場合、この手順は通常、 StorageFolder.CreateFileQuery メソッドを呼び出し、結果として得られる StorageFileQueryResult オブジェクトの GetFilesAsync メソッドを呼び出すことによって実現されます。 GetFilesAsync メソッドは、StorageFile オブジェクトの IReadOnlyList コレクションを返します。
- 目的のファイルを表す StorageFile オブジェクトにアクセスすると、 StorageFile.IsAvailable プロパティの値に、ファイルが使用可能かどうかが反映されます。
次の汎用メソッドは、任意のフォルダーを列挙し、そのフォルダーの StorageFile オブジェクトのコレクションを返す方法を示しています。 呼び出し元のメソッドは、各ファイルの StorageFile.IsAvailable プロパティを参照して、返されたコレクションを反復処理します。
/// <summary>
/// Generic function that retrieves all files from the specified folder.
/// </summary>
/// <param name="folder">The folder to be searched.</param>
/// <returns>An IReadOnlyList collection containing the file objects.</returns>
async Task<System.Collections.Generic.IReadOnlyList<StorageFile>> GetLibraryFilesAsync(StorageFolder folder)
{
var query = folder.CreateFileQuery();
return await query.GetFilesAsync();
}
private async void CheckAvailabilityOfFilesInPicturesLibrary()
{
// Determine availability of all files within Pictures library.
var files = await GetLibraryFilesAsync(KnownFolders.PicturesLibrary);
for (int i = 0; i < files.Count; i++)
{
StorageFile file = files[i];
StringBuilder fileInfo = new StringBuilder();
fileInfo.AppendFormat("{0} (on {1}) is {2}",
file.Name,
file.Provider.DisplayName,
file.IsAvailable ? "available" : "not available");
}
}