Partager via


Accédez aux fichiers et dossiers avec les API WinUI 3 et WinRT

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

Lorsque vous créez des applications WinUI empaquetées, vous pouvez utiliser les API WinRT pour accéder à des fichiers et dossiers à 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 à partir du SDK .NET.

Cet article se concentre sur les API WinRT storage 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 et la date de modification de fichier pour 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 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 l’événement Pictures et la bibliothèque 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édez aux fichiers et dossiers avec les API Windows App SDK et .NET

Files, dossiers et bibliothèques avec Windows App SDK