Partager via


Accéder aux fichiers et dossiers avec le SDK d’application Windows et les API WinRT

Les applications du SDK d’application Windows empaquetées peuvent tirer parti des API WinRT pour lire et écrire des paramètres d’application, des sélecteurs de fichiers et de dossiers, et des emplacements de bac à sable « sandbox » tels que la bibliothèque de musique/vidéos. En outre, n’importe quelle application de bureau empaquetée peut utiliser les API WinRT et Win32 dans le SDK Windows, ainsi que les API fournies dans le SDK .NET. Cet article fournit des conseils sur l’utilisation des API de stockage WinRT pour interroger des fichiers et des dossiers, récupérer des propriétés de fichier et utiliser la bibliothèque Images.

Interroger des fichiers et des dossiers

L’exemple suivant montre comment utiliser les API StorageFolder et StorageFile pour interroger la bibliothèque Documents à la recherche de fichiers et de dossiers. L’exemple utilise la méthode GetFilesInFolderAsync pour itérer de manière récursive au sein de la structure de dossiers et ajouter les noms de fichiers à un objet StringBuilder.

using System.Text;
using Windows.Storage;
...
private async Task<string> GetDocumentsContentsAsync()
{
    StorageFolder docsFolder = KnownFolders.DocumentsLibrary;
    StringBuilder outputBuilder = new();
    await GetFilesInFolderAsync(docsFolder, outputBuilder);

    return outputBuilder.ToString();
}

private async Task GetFilesInFolderAsync(StorageFolder folder, StringBuilder outputBuilder)
{
    IReadOnlyList<IStorageItem> storageItem = await folder.GetItemsAsync();

    foreach (var item in storageItem)
    {
        if (item is StorageFolder)
        {
            await GetFilesInFolderAsync(item as StorageFolder, outputBuilder);
        }
        else
        {
            outputBuilder.AppendLine($"Found {item.Name} in folder {folder.Name}");
        }
    }
}

Obtenir les propriétés de base des fichiers

L’exemple suivant prend la méthode GetFilesInFolderAsync de l’exemple précédent et ajoute la capacité à récupérer la taille de fichier et la date de modification pour chaque fichier. L’exemple utilise l’API BasicProperties pour récupérer la taille de fichier et la date de modification de chaque fichier, met en forme la taille du fichier, et ajoute la taille et la date de modification à l’objet StringBuilder après chaque nom de fichier et de dossier.

using System.Text;
using Windows.Storage;
using Windows.Storage.FileProperties;
...
private async Task GetFilesInFolderAsync(StorageFolder folder, StringBuilder outputBuilder)
{
    IReadOnlyList<IStorageItem> storageItem = await folder.GetItemsAsync();

    foreach (var item in storageItem)
    {
        if (item is StorageFolder)
        {
            await GetFilesInFolderAsync(item as StorageFolder, outputBuilder);
        }
        else
        {
            outputBuilder.AppendLine($"Found {item.Name} in folder {folder.Name}");

            // Append each file's size and date modified.
            BasicProperties basicProperties = await item.GetBasicPropertiesAsync();
            string fileSize = string.Format("{0:n0}", basicProperties.Size);
            outputBuilder.AppendLine($" - File size: {fileSize} bytes");
            outputBuilder.AppendLine($" - Date modified: {basicProperties.DateModified}");
        }
    }
}

Utilisation de la bibliothèque Images

Dans cet exemple, l’application est configurée pour recevoir des notifications lorsque la bibliothèque Images est mise à jour. L’exemple utilise l’API StorageLibrary pour récupérer la bibliothèque Images, et l’événement DefinitionChanged pour recevoir des notifications lorsque la bibliothèque est mise à jour. L’événement DefinitionChanged est appelé lorsque la liste des dossiers de la bibliothèque actuelle change. L’exemple utilise la propriété Folders de la bibliothèque pour itérer au sein des dossiers de la bibliothèque Images, et écrit le nom du dossier dans la console.

using Windows.Storage;
...
private async Task Configure()
{
    StorageLibrary picturesFolder = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Pictures);
    picturesFolder.DefinitionChanged += picturesFolder_DefinitionChanged;
}
private void picturesFolder_DefinitionChanged(StorageLibrary sender, object args)
{
    foreach (StorageFolder item in sender.Folders)
    {
        Console.WriteLine($"Folder {item.Name} found.");
    }
}

Voir aussi

Accéder aux fichiers et dossiers avec le SDK d’application Windows et les API .NET

Fichiers, dossiers et bibliothèques avec le SDK d’application Windows