判斷 Microsoft OneDrive 檔案的可用性
重要 API
- FileIO 類別
- StorageFile 類別 \(英文\)
- StorageFile.IsAvailable 屬性 \(英文\)
判斷 Microsoft OneDrive 檔案是否可使用 StorageFile.IsAvailable 屬性。
必要條件
了解通用 Windows 平台 (UWP) 應用程式的非同步程式設計
您可以參閱在 C# 或 Visual Basic 中呼叫非同步 API,以了解如何使用 C# 或 Visual Basic 撰寫非同步的應用程式。 若要了解如何使用 C++ 撰寫非同步的應用程式,請參閱 C++ 的非同步程式設計。
應用程式功能宣告
請參閱檔案存取權限。
使用 StorageFile.IsAvailable 屬性
使用者可以將 OneDrive 檔案標示為可離線使用或僅限線上使用。 此功能可讓使用者將大型檔案(例如圖片和影片)移至其 OneDrive、將其標示為僅限線上賞用,以及節省磁碟空間 (本機僅只保留中繼資料檔案)。
StorageFile.IsAvailable \(英文\),可用來判斷檔案目前是否可用。 下表顯示各種案例中 StorageFile.IsAvailable 屬性的值。
檔案的類型 | 線上 | 計量付費網路 | 離線 |
---|---|---|---|
本機檔案 | True | True | True |
標示為可離線使用的 OneDrive 檔案 | True | True | True |
標示為僅限線上使用的 OneDrive 檔案 | True | 根據使用者設定 | False |
網路檔案 | True | 根據使用者設定 | False |
下列步驟說明如何判斷檔案目前是否可用。
- 宣告適合您要存取之程式庫的功能。
- 包含 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");
}
}