Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ajoutez des dossiers existants de musique, d’images ou de vidéos aux bibliothèques correspondantes. Vous pouvez également supprimer des dossiers des bibliothèques, obtenir la liste des dossiers d’une bibliothèque et découvrir les photos stockées, la musique et les vidéos.
Une bibliothèque est une collection virtuelle de dossiers, qui inclut un dossier connu par défaut, ainsi que tous les autres dossiers que l’utilisateur a ajoutés à la bibliothèque à l’aide de votre application ou de l’une des applications intégrées. Par exemple, la bibliothèque Images inclut le dossier Images connu par défaut. L’utilisateur peut ajouter des dossiers ou les supprimer de la bibliothèque Images à l’aide de votre application ou de l’application Photos intégrée.
Conditions préalables
Comprendre la programmation asynchrone pour les applications de plateforme Windows universelle (UWP)
Vous pouvez apprendre à écrire des applications asynchrones en C# ou En Visual Basic, consultez Appeler des API asynchrones en C# ou Visual Basic. Pour savoir comment écrire des applications asynchrones en C++, consultez programmation asynchrone en C++.
permissions d’accès à l’emplacement
Dans Visual Studio, ouvrez le fichier manifeste de l’application dans le Concepteur de manifestes. Dans la page Fonctionnalités, sélectionnez les bibliothèques que votre application gère.
- Bibliothèque de musique
- Bibliothèque d’images
- Bibliothèque de vidéos
Pour plus d’informations, consultez autorisations d'accès aux fichiers.
Obtenir une référence à une bibliothèque
Remarque
N’oubliez pas de déclarer la fonctionnalité appropriée. Pour plus d’informations, consultez les déclarations de capacités de l’application .
Pour obtenir une référence à la bibliothèque Musique, Images ou Vidéo de l’utilisateur, appelez la méthode StorageLibrary.GetLibraryAsync. Fournissez la valeur correspondante de l’énumération KnownLibraryId.
var myPictures = await Windows.Storage.StorageLibrary.GetLibraryAsync(Windows.Storage.KnownLibraryId.Pictures);
Obtenir la liste des dossiers d’une bibliothèque
Pour obtenir la liste des dossiers d’une bibliothèque, obtenez la valeur de la propriété StorageLibrary.Folders.
using Windows.Foundation.Collections;
IObservableVector<Windows.Storage.StorageFolder> myPictureFolders = myPictures.Folders;
Obtenir le dossier dans une bibliothèque où les nouveaux fichiers sont enregistrés par défaut
Pour obtenir le dossier d’une bibliothèque dans laquelle de nouveaux fichiers sont enregistrés par défaut, obtenez la valeur de la propriété StorageLibrary.SaveFolder.
Windows.Storage.StorageFolder savePicturesFolder = myPictures.SaveFolder;
Ajouter un dossier existant à une bibliothèque
Pour ajouter un dossier à une bibliothèque, vous appelez le StorageLibrary.RequestAddFolderAsync. En prenant la bibliothèque d’images comme exemple, l’appel de cette méthode entraîne l’affichage d’un sélecteur de dossiers à l’utilisateur avec un Ajouter ce dossier à Images bouton. Si l’utilisateur sélectionne un dossier, le dossier reste à son emplacement d’origine sur le disque et devient un élément dans la propriété StorageLibrary.Folders (et dans l’application Photos intégrée), mais le dossier n’apparaît pas comme enfant du dossier Images dans l’Explorateur de fichiers.
Windows.Storage.StorageFolder newFolder = await myPictures.RequestAddFolderAsync();
Supprimer un dossier d’une bibliothèque
Pour supprimer un dossier d’une bibliothèque, appelez la méthode StorageLibrary.RequestRemoveFolderAsync et spécifiez le dossier à supprimer. Vous pouvez utiliser StorageLibrary.Folders et un contrôle ListView (ou similaire) pour que l’utilisateur sélectionne un dossier à supprimer.
Lorsque vous appelez StorageLibrary.RequestRemoveFolderAsync, l’utilisateur voit une boîte de dialogue de confirmation indiquant que le dossier « n’apparaîtra plus dans Images, mais ne sera plus supprimé ». Cela signifie que le dossier reste dans son emplacement d’origine sur le disque, est supprimé de la propriété StorageLibrary.Folders et n’est plus inclus dans l’application Photos intégrée.
L’exemple suivant suppose que l’utilisateur a sélectionné le dossier à supprimer d’un contrôle ListView
bool result = await myPictures.RequestRemoveFolderAsync(folder);
Recevoir une notification des modifications apportées à la liste des dossiers d’une bibliothèque
Pour être informé des modifications apportées à la liste des dossiers d’une bibliothèque, inscrivez un gestionnaire pour l’événement StorageLibrary.DefinitionChanged de la bibliothèque.
myPictures.DefinitionChanged += MyPictures_DefinitionChanged;
void HandleDefinitionChanged(Windows.Storage.StorageLibrary sender, object args)
{
// ...
}
Dossiers de bibliothèque multimédia
Un appareil fournit cinq emplacements prédéfinis pour que les utilisateurs et les applications stockent des fichiers multimédias. Les applications intégrées stockent les médias créés par l’utilisateur et les médias téléchargés dans ces emplacements.
Les emplacements sont les suivants :
Dossier Images. Contient des images.
dossier Roll caméra. Contient des photos et des vidéos à partir de l’appareil photo intégré.
dossier Images enregistrées. Contient des images que l’utilisateur a enregistrées à partir d’autres applications.
dossier Musique. Contient des chansons, des podcasts et des livres audio.
dossier Video. Contient des vidéos.
Les utilisateurs ou applications peuvent également stocker des fichiers multimédias en dehors des dossiers de bibliothèque multimédia sur la carte SD. Pour rechercher un fichier multimédia de manière fiable sur la carte SD, analysez le contenu de la carte SD ou demandez à l’utilisateur de localiser le fichier à l’aide d’un sélecteur de fichiers. Pour plus d’informations, consultez Accéder à la carte SD.
Interrogation des bibliothèques multimédias
Pour obtenir une collection de fichiers, spécifiez la bibliothèque et le type de fichiers souhaités.
using Windows.Storage;
using Windows.Storage.Search;
private async void getSongs()
{
QueryOptions queryOption = new QueryOptions
(CommonFileQuery.OrderByTitle, new string[] { ".mp3", ".mp4", ".wma" });
queryOption.FolderDepth = FolderDepth.Deep;
Queue<IStorageFolder> folders = new Queue<IStorageFolder>();
var files = await KnownFolders.MusicLibrary.CreateFileQueryWithOptions
(queryOption).GetFilesAsync();
foreach (var file in files)
{
// do something with the music files
}
}
Les résultats des requêtes incluent le stockage interne et amovible
Les utilisateurs peuvent choisir de stocker des fichiers par défaut sur la carte SD facultative. Toutefois, les applications peuvent refuser l’autorisation de stocker des fichiers sur la carte SD. Par conséquent, les bibliothèques multimédias peuvent être fractionnées entre le stockage interne de l’appareil et la carte SD.
Vous n’avez pas besoin d’écrire du code supplémentaire pour gérer cette possibilité. Les méthodes de l’espace de noms Windows.Storage qui interrogent les dossiers connus combinent de manière transparente les résultats de la requête à partir des deux emplacements. Vous n'avez pas besoin de spécifier la fonctionnalité amovibleStorage dans le fichier manifeste de l'application pour pouvoir obtenir ces résultats combinés.
Considérez l’état du stockage de l’appareil illustré dans l’image suivante :
Si vous interrogez le contenu de la bibliothèque d’images en appelant await KnownFolders.PicturesLibrary.GetFilesAsync()
, les résultats incluent à la fois internalPic.jpg et SDPic.jpg.
Utilisation de photos
Sur les appareils où la caméra enregistre à la fois une image à faible résolution et une image haute résolution de chaque image, les requêtes approfondies retournent uniquement l’image à faible résolution.
Le roll de la caméra et le dossier Images enregistrées ne prennent pas en charge les requêtes approfondies.
Ouverture d’une photo dans l’application qui l’a capturée
Si vous souhaitez permettre à l’utilisateur d’ouvrir une photo ultérieurement dans l’application qui l’a capturée, vous pouvez enregistrer l'CreatorAppId avec les métadonnées de la photo à l’aide du code similaire à l’exemple suivant. Dans cet exemple, testPhoto est un StorageFile.
IDictionary<string, object> propertiesToSave = new Dictionary<string, object>();
propertiesToSave.Add("System.CreatorOpenWithUIOptions", 1);
propertiesToSave.Add("System.CreatorAppId", appId);
testPhoto.Properties.SavePropertiesAsync(propertiesToSave).AsyncWait();
Utilisation de méthodes de flux pour ajouter un fichier à une bibliothèque multimédia
Lorsque vous accédez à une bibliothèque multimédia à l’aide d’un dossier connu tel que KnownFolders.PictureLibrary, et que vous utilisez des méthodes de flux pour ajouter un fichier à la bibliothèque multimédia, vous devez vous assurer de fermer tous les flux que votre code ouvre. Sinon, ces méthodes ne parviennent pas à ajouter le fichier à la bibliothèque multimédia comme prévu, car au moins un flux a toujours un handle dans le fichier.
Par exemple, lorsque vous exécutez le code suivant, le fichier n’est pas ajouté à la bibliothèque multimédia. Dans la ligne de code, using (var destinationStream = (await destinationFile.OpenAsync(FileAccessMode.ReadWrite)).GetOutputStreamAt(0))
, la méthode OpenAsync et la méthode GetOutputStreamAt ouvrez un flux. Toutefois, seul le flux ouvert par la méthode GetOutputStreamAt est libéré à la suite de l'instruction using. L’autre flux reste ouvert et empêche l’enregistrement du fichier.
StorageFolder testFolder = await StorageFolder.GetFolderFromPathAsync(@"C:\test");
StorageFile sourceFile = await testFolder.GetFileAsync("TestImage.jpg");
StorageFile destinationFile = await KnownFolders.CameraRoll.CreateFileAsync("MyTestImage.jpg");
using (var sourceStream = (await sourceFile.OpenReadAsync()).GetInputStreamAt(0))
{
using (var destinationStream = (await destinationFile.OpenAsync(FileAccessMode.ReadWrite)).GetOutputStreamAt(0))
{
await RandomAccessStream.CopyAndCloseAsync(sourceStream, destinationStream);
}
}
Pour utiliser les méthodes de flux pour ajouter un fichier à la bibliothèque multimédia, veillez à fermer tous les flux que votre code ouvre, comme illustré dans l’exemple suivant.
StorageFolder testFolder = await StorageFolder.GetFolderFromPathAsync(@"C:\test");
StorageFile sourceFile = await testFolder.GetFileAsync("TestImage.jpg");
StorageFile destinationFile = await KnownFolders.CameraRoll.CreateFileAsync("MyTestImage.jpg");
using (var sourceStream = await sourceFile.OpenReadAsync())
{
using (var sourceInputStream = sourceStream.GetInputStreamAt(0))
{
using (var destinationStream = await destinationFile.OpenAsync(FileAccessMode.ReadWrite))
{
using (var destinationOutputStream = destinationStream.GetOutputStreamAt(0))
{
await RandomAccessStream.CopyAndCloseAsync(sourceInputStream, destinationStream);
}
}
}
}