确定 Microsoft OneDrive 文件的可用性

重要的 API

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

必备条件

使用 StorageFile.IsAvailable 属性

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

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

文件类型 联机 按流量计费的网络 脱机
本地文件 True True True
标记为脱机可用的 OneDrive 文件 True True True
标记为仅联机可用的 OneDrive 文件 正确 基于用户设置 错误
网络文件 正确 基于用户设置 错误

 

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

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