Microsoft OneDrive ファイルが利用可能かどうかの確認
重要な API
StorageFile.IsAvailable プロパティを使って、Microsoft OneDrive ファイルが利用可能かどうかを確認します。
前提条件
ユニバーサル Windows プラットフォーム (UWP) アプリの非同期プログラミングについての理解
C# や Visual Basic での非同期アプリの作成方法については、「C# または Visual Basic での非同期 API の呼び出し」をご覧ください。 C++ での非同期アプリの作成方法については、「C++ での非同期プログラミング」をご覧ください。
アプリ機能の宣言
「ファイル アクセス許可」をご覧ください。
StorageFile.IsAvailable プロパティの使用
ユーザーは、OneDrive ファイルを "オフラインで利用可能" (既定) または "オンラインのみ" とマークできます。 この機能を使うと、大容量のファイル (写真やビデオなど) を自分の OneDrive に移動し、オンラインのみとマークすることで、ディスク領域を節約できます (ローカルに保存されるのはメタデータ ファイルのみです)。
StorageFile.IsAvailable は、ファイルが現在利用可能であるかどうかを判別するために使われます。 次の表に、さまざまなシナリオでの StorageFile.IsAvailable プロパティの値を示します。
ファイルの種類 | オンライン | 従量制課金接続 | オフライン |
---|---|---|---|
ローカル ファイル | True | True | True |
オフラインで利用可能とマークされている OneDrive ファイル | True | True | True |
オンラインのみとマークされている 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");
}
}