共用方式為


判斷 Microsoft OneDrive 檔案的可用性

重要的應用程式介面

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

先決條件

  • 瞭解通用 Windows 平臺 (UWP) app 的異步程式設計

    您可以瞭解如何在 C# 或 Visual Basic 撰寫異步應用程式,請參閱在 C# 或 Visual Basic 中呼叫異步 API 。 若要瞭解如何在 C++ 中撰寫異步應用程式,請參閱 C++中的 異步程序設計。

  • 應用程式功能宣告

    請參閱 檔案存取許可權

使用 StorageFile.IsAvailable 屬性

用戶可以將 OneDrive 檔案標示為可用離線或僅限線上。 此功能可讓使用者將大型檔案(例如圖片和影片)移至其 OneDrive、將其標示為僅限在線,並節省磁碟空間(本機保留的唯一專案是元數據檔案)。

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

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

 

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

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