通过


确定 Microsoft OneDrive 文件的可用性

重要的 API

使用 StorageFile.IsAvailable 属性确定 Microsoft OneDrive 文件是否可用。

先决条件

使用 StorageFile.IsAvailable 属性

用户可以将 OneDrive 文件标记为可脱机访问(默认)或仅可联机访问。 此功能使用户能够将大型文件(如图片和视频)移动到其 OneDrive,将其标记为仅联机,并节省磁盘空间(本地保存的唯一内容是元数据文件)。

StorageFile.IsAvailable 用于确定文件当前是否可用。 下表显示了各种方案中 StorageFile.IsAvailable 属性的值。

文件类型 在线 按流量计费的网络 离线
本地文件 True True True
已标记为脱机可用的 OneDrive 文件 True True True
标记为仅限联机的 OneDrive 文件 True 基于用户设置
网络文件 True 基于用户设置

 

以下步骤演示如何确定文件当前是否可用。

  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");
    }
}