Partager via


Accéder aux fichiers et dossiers avec des API WinUI et WinRT

Les applications WinUI peuvent accéder aux fichiers et dossiers à l’aide des API Windows Runtime (WinRT) pour les opérations de fichiers courantes. Cet article explique comment accéder aux fichiers et dossiers, interroger des bibliothèques système, récupérer des propriétés de fichier et utiliser des emplacements tels que des images et des documents.

Lorsque vous créez des applications WinUI empaquetées, vous pouvez utiliser des API WinRT pour accéder aux fichiers et dossiers dans des emplacements spécifiques. Ces API vous permettent de lire et d’écrire des paramètres d’application, d’ouvrir des sélecteurs de fichiers et de dossiers, et d’utiliser des emplacements en bac à sable comme les bibliothèques vidéo et musique. Vous pouvez également combiner des API WinRT avec des API Win32 à partir du Kit de développement logiciel (SDK) Windows et des API du Kit de développement logiciel (SDK) .NET.

Cet article se concentre sur les API de stockage WinRT et montre comment :

  • Interroger des fichiers et des dossiers dans des bibliothèques système
  • Récupérer des propriétés de fichier de base telles que la taille et la date de modification
  • Surveiller les modifications apportées à la bibliothèque d'images

Interroger des fichiers et des dossiers

L’exemple suivant montre comment utiliser les API StorageFolder et StorageFile pour interroger la bibliothèque documents pour les fichiers et dossiers. L’exemple utilise la GetFilesInFolderAsync méthode pour effectuer une itération récursive dans la structure de dossiers et ajouter les noms de fichiers à un StringBuilder objet.

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 fichier de base

L’exemple suivant prend la GetFilesInFolderAsync méthode de l’exemple précédent et ajoute la possibilité de récupérer la taille et la date de modification de fichier pour chaque fichier. L’exemple utilise l’API BasicProperties pour récupérer la taille de fichier et la date modifiées pour chaque fichier, mettre en forme la taille du fichier et ajouter la taille et la date modifiées à 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 d'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 d’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 active change. L’exemple utilise la propriété de Folders la bibliothèque pour itérer dans les dossiers de la bibliothèque Images et écrire 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 Kit de développement logiciel (SDK) d’application Windows