Поделиться через


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

Важные API

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

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

Использование свойства StorageFile.IsAvailable

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

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

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

 

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

  1. Объявите возможность, соответствующую библиотеке, к которой вы хотите получить доступ.
  2. Включите пространство имен Windows.Storage. Это пространство имен включает типы для управления файлами, папками и параметрами приложения. Он также включает необходимый тип StorageFile .
  3. Получение объекта StorageFile для нужных файлов. При перечислении библиотеки этот шаг обычно выполняется путем вызова метода StorageFolder.CreateFileQuery, а затем вызова результирующего метода GetFilesAsync объекта StorageFileQueryResult. Метод GetFilesAsync возвращает коллекцию объектов 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");
    }
}