Определение доступности файлов Microsoft OneDrive

Важные API

Определите, доступен ли файл Microsoft OneDrive с помощью свойства служба хранилища File.IsAvailable.

Необходимые компоненты

Использование свойства служба хранилища File.IsAvailable

Пользователи могут пометить файлы OneDrive как доступные в автономном режиме (по умолчанию) или только в Сети. Эта возможность позволяет пользователям перемещать большие файлы (например, изображения и видео) в OneDrive, помечать их как доступные только в Сети, а также сохранять место на диске (единственное, что хранится локально — это файл метаданных).

StorageFile.IsAvailable позволяет определить, доступен ли файл в настоящий момент. В следующей таблице показано значение свойства служба хранилища File.IsAvailable в различных сценариях.

Тип файла Миграция по сети Лимитная сеть Offline
Локальный файл Истина True Истина
Файл OneDrive, помеченный как доступный в автономном режиме Истина True Истина
Файл OneDrive, помеченный как доступный только в Интернете Истина На основе параметров пользователя False
Сетевой файл Истина На основе параметров пользователя False

 

Ниже показано, как определить, доступен ли файл в данный момент.

  1. Объявите возможность, соответствующую библиотеке, к которой вы хотите получить доступ.
  2. Включите пространство имен Windows.служба хранилища. Это пространство имен включает типы для управления файлами, папками и параметрами приложения. Он также включает необходимый тип служба хранилища File.
  3. Получите объект служба хранилища File для нужных файлов. Если вы перечисляете библиотеку, этот шаг обычно выполняется путем вызова метода getFilesAsync объекта служба хранилища Folder.CreateFileQuery и вызова результирующего метода служба хранилища FileQueryResult объекта GetFilesAsync. Метод GetFilesAsync возвращает коллекцию IReadOnlyList объектов служба хранилища File.
  4. Получив доступ к объекту служба хранилища File, представляющем нужные файлы, значение свойства служба хранилища File.IsAvailable отражает, доступен ли файл.

В следующем универсальном методе показано, как перечислить любую папку и вернуть коллекцию объектов служба хранилища File для этой папки. Затем вызывающий метод выполняет итерацию по возвращаемой коллекции, ссылающейся на свойство служба хранилища File.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");
    }
}