判斷 Microsoft OneDrive 檔案的可用性

重要 API

判斷 Microsoft OneDrive 檔案是否可使用 StorageFile.IsAvailable 屬性。

必要條件

使用 StorageFile.IsAvailable 屬性

使用者可以將 OneDrive 檔案標示為可離線使用或僅限線上使用。 此功能可讓使用者將大型檔案(例如圖片和影片)移至其 OneDrive、將其標示為僅限線上賞用,以及節省磁碟空間 (本機僅只保留中繼資料檔案)。

StorageFile.IsAvailable \(英文\),可用來判斷檔案目前是否可用。 下表顯示各種案例中 StorageFile.IsAvailable 屬性的值。

檔案的類型 線上 計量付費網路 離線
本機檔案 True True True
標示為可離線使用的 OneDrive 檔案 True True True
標示為僅限線上使用的 OneDrive 檔案 True 根據使用者設定 False
網路檔案 True 根據使用者設定 False

 

下列步驟說明如何判斷檔案目前是否可用。

  1. 宣告適合您要存取之程式庫的功能。
  2. 包含 Windows.Storage 命名空間。 此命名空間包含用於管理檔案、資料夾和應用程式設定的類型。 也包含所需的 StorageFile 類型。
  3. 取得所需檔案的 StorageFile 物件。 如果您要列舉程式庫,這個步驟通常是藉由呼叫 StorageFolder.CreateFileQuery 方法來完成,然後呼叫所產生的 StorageFileQueryResult 物件的 GetFilesAsync 方法。 GetFilesAsync 方法會傳回 StorageFile 物件的 IReadOnlyList 集合。
  4. 當您能夠存取代表所需檔案的 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");
    }
}