Partager via


Accéder à la carte SD

Vous pouvez stocker et accéder aux données non essentielles sur une carte microSD facultative, en particulier sur les appareils mobiles à faible coût qui ont un stockage interne limité et qui ont un emplacement pour une carte SD.

Dans la plupart des cas, vous devez spécifier la fonctionnalité amovible dans le fichier manifeste de l’application avant que votre application puisse stocker et accéder aux fichiers sur la carte SD. En règle générale, vous devez également vous inscrire pour gérer le type de fichiers que votre application stocke et accède.

Vous pouvez stocker et accéder aux fichiers sur la carte SD facultative à l’aide des méthodes suivantes :

  • Sélecteurs de fichiers.
  • Les API Windows.Storage .

Ce que vous pouvez et ne pouvez pas accéder à la carte SD

Ce que vous pouvez accéder

  • Votre application peut uniquement lire et écrire des fichiers de types de fichiers que l’application a inscrits pour gérer dans le fichier manifeste de l’application.
  • Votre application peut également créer et gérer des dossiers.

Ce que vous ne pouvez pas accéder

  • Votre application ne peut pas voir ou accéder aux dossiers système et aux fichiers qu’elles contiennent.
  • Votre application ne peut pas voir les fichiers marqués avec l’attribut Masqué. L’attribut Masqué est généralement utilisé pour réduire le risque de suppression accidentelle des données.
  • Votre application ne peut pas voir ou accéder à la bibliothèque de documents à l’aide de KnownFolders.DocumentsLibrary. Toutefois, vous pouvez accéder à la bibliothèque de documents sur la carte SD en parcourant le système de fichiers.

Considérations relatives à la sécurité et à la confidentialité

Lorsqu’une application enregistre des fichiers dans un emplacement global sur la carte SD, ces fichiers ne sont pas chiffrés afin qu’ils soient généralement accessibles à d’autres applications.

  • Bien que la carte SD se trouve sur l’appareil, vos fichiers sont accessibles à d’autres applications inscrites pour gérer le même type de fichier.
  • Lorsque la carte SD est supprimée de l’appareil et ouverte à partir d’un PC, vos fichiers sont visibles dans l’Explorateur de fichiers et accessibles à d’autres applications.

Lorsqu’une application installée sur la carte SD enregistre des fichiers dans son LocalFolder, toutefois, ces fichiers sont chiffrés et ne sont pas accessibles à d’autres applications.

Conditions requises pour accéder aux fichiers sur la carte SD

Pour accéder aux fichiers sur la carte SD, vous devez généralement spécifier les éléments suivants.

  1. Vous devez spécifier la capacité amovibleStorage dans le fichier manifeste de l'application.
  2. Vous devez également vous inscrire pour gérer les extensions de fichier associées au type de média auquel vous souhaitez accéder.

Utilisez également la méthode précédente pour accéder aux fichiers multimédias sur la carte SD sans référencer un dossier connu tel que KnownFolders.MusicLibrary, ou pour accéder aux fichiers multimédias stockés en dehors des dossiers de la bibliothèque multimédia.

Pour accéder aux fichiers multimédias stockés dans les bibliothèques multimédias ( Musique, Photos ou Vidéos) à l’aide de dossiers connus, vous devez uniquement spécifier la fonctionnalité associée dans le fichier manifeste de l’application ,musicLibrary, imagesLibraryou videoLibrary. Vous n’avez pas besoin de spécifier la fonctionnalité amovible. Pour plus d’informations, consultez fichiers et dossiers dans les bibliothèques Musique, Images et Vidéos.

Accès aux fichiers sur la carte SD

Obtention d’une référence à la carte SD

Le dossier KnownFolders.RemovableDevices est la racine logique StorageFolder pour l’ensemble d’appareils amovibles actuellement connectés à l’appareil. Si une carte SD est présente, la première (et seule) StorageFolder sous le dossier KnownFolders.RemovableDevices représente la carte SD.

Utilisez du code comme suit pour déterminer si une carte SD est présente et pour obtenir une référence à celle-ci en tant que StorageFolder.

using Windows.Storage;

// Get the logical root folder for all external storage devices.
StorageFolder externalDevices = Windows.Storage.KnownFolders.RemovableDevices;

// Get the first child folder, which represents the SD card.
StorageFolder sdCard = (await externalDevices.GetFoldersAsync()).FirstOrDefault();

if (sdCard != null)
{
    // An SD card is present and the sdCard variable now contains a reference to it.
}
else
{
    // No SD card is present.
}

Remarque

Si votre lecteur de carte SD est un lecteur incorporé (par exemple, un emplacement dans l’ordinateur portable ou le PC lui-même), il peut ne pas être accessible via KnownFolders.RemovableDevices.

Consultation du contenu de la carte SD

La carte SD peut contenir de nombreux dossiers et fichiers qui ne sont pas reconnus comme des dossiers connus et qui ne peuvent pas être interrogés à l’aide d’un emplacement à partir de KnownFolders. Pour rechercher des fichiers, votre application doit énumérer le contenu de la carte en parcourant le système de fichiers de manière récursive. Utilisez GetFilesAsync (CommonFileQuery.DefaultQuery) et GetFoldersAsync (CommonFolderQuery.DefaultQuery) pour obtenir efficacement le contenu de la carte SD.

Nous vous recommandons d’utiliser un thread d’arrière-plan pour parcourir la carte SD. Une carte SD peut contenir de nombreux gigaoctets de données.

Votre application peut également demander à l’utilisateur de choisir des dossiers spécifiques à l’aide du sélecteur de dossiers.

Lorsque vous accédez au système de fichiers sur la carte SD avec un chemin d’accès que vous avez dérivé de KnownFolders.RemovableDevices, les méthodes suivantes se comportent de la manière suivante.

  • La méthode GetFilesAsync retourne l’union des extensions de fichier que vous avez inscrites pour gérer et les extensions de fichier associées à toutes les fonctionnalités de bibliothèque multimédia que vous avez spécifiées.
  • La méthode GetFileFromPathAsync échoue si vous n’avez pas inscrit pour gérer l’extension de fichier du fichier auquel vous essayez d’accéder.

Identification de la carte SD individuelle

Lorsque la carte SD est montée pour la première fois, le système d’exploitation génère un identificateur unique pour la carte. Il stocke cet ID dans un fichier dans le dossier WPSystem à la racine de la carte. Une application peut utiliser cet ID pour déterminer s’il reconnaît la carte. Si une application reconnaît la carte, l’application peut être en mesure de reporter certaines opérations qui ont été effectuées précédemment. Toutefois, le contenu de la carte a peut-être changé depuis le dernier accès à la carte par l’application.

Par exemple, considérez une application qui indexe des livres électroniques. Si l’application a précédemment analysé l’intégralité de la carte SD pour les fichiers de livres électroniques et créé un index des livres électroniques, elle peut afficher la liste immédiatement si la carte est réinsérée et que l’application reconnaît la carte. Séparément, il peut démarrer un thread d’arrière-plan de faible priorité pour rechercher de nouveaux livres électroniques. Il peut également gérer un échec de recherche d’un livre électronique qui existait précédemment lorsque l’utilisateur tente d’accéder au livre électronique supprimé.

Le nom de la propriété qui contient cet ID est WindowsPhone.ExternalStorageId.

using Windows.Storage;

// Get the logical root folder for all external storage devices.
StorageFolder externalDevices = Windows.Storage.KnownFolders.RemovableDevices;

// Get the first child folder, which represents the SD card.
StorageFolder sdCard = (await externalDevices.GetFoldersAsync()).FirstOrDefault();

if (sdCard != null)
{
    var allProperties = sdCard.Properties;
    IEnumerable<string> propertiesToRetrieve = new List<string> { "WindowsPhone.ExternalStorageId" };

    var storageIdProperties = await allProperties.RetrievePropertiesAsync(propertiesToRetrieve);

    string cardId = (string)storageIdProperties["WindowsPhone.ExternalStorageId"];

    if (...) // If cardID matches the cached ID of a recognized card.
    {
        // Card is recognized. Index contents opportunistically.
    }
    else
    {
        // Card is not recognized. Index contents immediately.
    }
}