Determinando a disponibilidade de arquivos do Microsoft OneDrive
APIs importantes
Determine se um arquivo do Microsoft OneDrive está disponível usando a propriedade StorageFile.IsAvailable.
Pré-requisitos
Entender a programação assíncrona para aplicativos UWP (Plataforma Universal do Windows)
Você pode aprender a escrever aplicativos assíncronos em C# ou Visual Basic, consulte Chamar APIs assíncronas em C# ou Visual Basic. Para saber como escrever aplicativos assíncronos em C++, consulte Programação assíncrona em C++.
Declarações de funcionalidades do aplicativo
Consulte Permissões de acesso a arquivo.
Usando a propriedade StorageFile.IsAvailable
Os usuários podem marcar os arquivos OneDrive como disponível offline (padrão) ou somente online. Com essa funcionalidade, os usuários podem transferir arquivos grandes (como fotos e vídeos) para o OneDrive, marcá-los como somente online e economizar espaço em disco (a única coisa mantida localmente é um arquivo de metadados).
StorageFile.IsAvailable é usada para determinar se um arquivo está disponível no momento. A tabela a seguir mostra o valor da propriedade StorageFile.IsAvailable em diversos cenários.
Tipo de arquivo | Online | Rede limitada | Offline |
---|---|---|---|
Arquivo local | True | True | True |
Arquivo OneDrive marcado como disponível offline | True | True | True |
Arquivo OneDrive marcado como somente online | Verdadeiro | Baseado nas configurações do usuário | Falso |
Arquivo de rede | Verdadeiro | Baseado nas configurações do usuário | Falso |
As etapas a seguir ilustram como determinar se um arquivo está disponível no momento.
- Declare uma funcionalidade apropriada para a biblioteca que você quer acessar.
- Inclua o namespace Windows.Storage. Esse namespace inclui os tipos para gerenciamento de arquivos, pastas e configurações de aplicativos. Inclui também o tipo StorageFile necessário.
- Obtenha um objeto StorageFile para o(s) arquivo(s) desejado(s). Se estiver enumerando uma biblioteca, essa etapa será normalmente realizada pela chamada ao método StorageFolder.CreateFileQuery e, depois, chamando o método StorageFileQueryResult do objeto resultante GetFilesAsync. O método GetFilesAsync retorna uma coleção IReadOnlyList de objetos StorageFile.
- Quando você tiver acesso a um objeto StorageFile representando os arquivos desejados, o valor da propriedade StorageFile.IsAvailable refletirá se o arquivo está ou não disponível.
O método genérico a seguir ilustra como enumerar qualquer pasta e retorna a coleção de objetos StorageFile dessa pasta. O método chamado faz a iteração sobre a coleção retornada, referenciando a propriedade StorageFile.IsAvailable de cada arquivo.
/// <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");
}
}