Dela via


Få åtkomst till SD-kortet

Du kan lagra och komma åt icke-nödvändiga data på ett valfritt microSD-kort, särskilt på mobila lågkostnadsenheter som har begränsad intern lagring och har en plats för ett SD-kort.

I de flesta fall måste du ange funktionen removableStorage i appmanifestfilen innan appen kan lagra och komma åt filer på SD-kortet. Vanligtvis måste du också registrera dig för att hantera den typ av filer som appen lagrar och har åtkomst till.

Du kan lagra och komma åt filer på det valfria SD-kortet med hjälp av följande metoder:

  • Filväljare.
  • Windows.Storage API:er .

Vad du kan och inte kan komma åt på SD-kortet

Vad du kan komma åt

  • Din app kan bara läsa och skriva filer av filtyper som appen har registrerat för att hantera i appmanifestfilen.
  • Din app kan också skapa och hantera mappar.

Vad du inte kan komma åt

  • Appen kan inte se eller komma åt systemmappar och filer som de innehåller.
  • Appen kan inte se filer som har markerats med attributet Dold. Attributet Dold används vanligtvis för att minska risken för att data tas bort av misstag.
  • Appen kan inte se eller komma åt dokumentbiblioteket med hjälp av KnownFolders.DocumentsLibrary. Du kan dock komma åt dokumentbiblioteket på SD-kortet genom att gå igenom filsystemet.

Säkerhets- och sekretessöverväganden

När en app sparar filer på en global plats på SD-kortet krypteras inte filerna, så de är vanligtvis tillgängliga för andra appar.

  • Medan SD-kortet finns på enheten är dina filer tillgängliga för andra appar som har registrerats för att hantera samma filtyp.
  • När SD-kortet tas bort från enheten och öppnas från en dator visas filerna i Utforskaren och är tillgängliga för andra appar.

När en app som är installerad på SD-kortet sparar filer i sin LocalFolder krypteras dock dessa filer och är inte tillgängliga för andra appar.

Krav för åtkomst till filer på SD-kortet

För att få åtkomst till filer på SD-kortet måste du vanligtvis ange följande saker.

  1. Du måste ange funktionen removableStorage i appmanifestfilen.
  2. Du måste också registrera dig för att hantera filnamnstilläggen som är associerade med den typ av media som du vill komma åt.

Använd föregående metod även för att komma åt mediefiler på SD-kortet utan att referera till en känd mapp som KnownFolders.MusicLibrary eller för att komma åt mediefiler som lagras utanför mediebiblioteksmapparna.

Om du vill komma åt mediefiler som lagras i mediebiblioteken – Musik, Foton eller Videor – med hjälp av kända mappar behöver du bara ange den associerade funktionen i appmanifestfilen – musicLibrary, picturesLibrary eller videoLibrary. Du behöver inte ange funktionen removableStorage . För mer information, se Filer och mappar i biblioteken Musik, Bilder och Videor.

Åtkomst till filer på SD-kortet

Hämta en referens till SD-kortet

Mappen KnownFolders.RemovableDevices är den logiska roten StorageFolder för den uppsättning flyttbara enheter som för närvarande är anslutna till enheten. Om det finns ett SD-kort representerar den första (och enda) Lagringsmappen under mappen KnownFolders.RemovableDevices SD-kortet.

Använd kod som följande för att avgöra om ett SD-kort finns och för att hämta en referens till det som en 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.
}

Anmärkning

Om SD-kortläsaren är en inbäddad läsare (till exempel en plats i den bärbara datorn eller datorn) kanske den inte är tillgänglig via KnownFolders.RemovableDevices.

Söka i innehållet på SD-kortet

SD-kortet kan innehålla många mappar och filer som inte känns igen som kända mappar och som inte kan efterfrågas med hjälp av en plats från KnownFolders. För att hitta filer måste appen räkna upp innehållet i kortet genom att gå igenom filsystemet rekursivt. Använd GetFilesAsync (CommonFileQuery.DefaultQuery) och GetFoldersAsync (CommonFolderQuery.DefaultQuery) för att få innehållet i SD-kortet effektivt.

Vi rekommenderar att du använder en bakgrundstråd för att passera SD-kortet. Ett SD-kort kan innehålla många gigabyte data.

Din app kan också kräva att användaren väljer specifika mappar med hjälp av mappväljaren.

När du kommer åt filsystemet på SD-kortet med en sökväg som du härledde från KnownFolders.RemovableDevices fungerar följande metoder på följande sätt.

  • Metoden GetFilesAsync returnerar unionen av de filnamnstillägg som du har registrerat för att hantera och filnamnstilläggen som är associerade med de mediebiblioteksfunktioner som du har angett.
  • Metoden GetFileFromPathAsync misslyckas om du inte har registrerat dig för att hantera filnamnstillägget för den fil som du försöker komma åt.

Identifiera det enskilda SD-kortet

När SD-kortet först monteras genererar operativsystemet en unik identifierare för kortet. Det lagrar detta ID i en fil i mappen WPSystem i roten på kortet. En app kan använda det här ID:t för att avgöra om den känner igen kortet. Om en app känner igen kortet kanske appen kan skjuta upp vissa åtgärder som slutfördes tidigare. Innehållet i kortet kan dock ha ändrats eftersom kortet senast användes av appen.

Tänk dig till exempel en app som indexerar e-böcker. Om appen tidigare har skannat hela SD-kortet efter e-bokfiler och skapat ett index för e-böcker, kan den visa listan omedelbart om kortet sätts in igen och appen känner igen kortet. Separat kan den starta en bakgrundstråd med låg prioritet för att söka efter nya e-böcker. Den kan också hantera ett misslyckande med att hitta en e-bok som fanns tidigare när användaren försöker komma åt den borttagna e-boken.

Namnet på egenskapen som innehåller det här ID:t är 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.
    }
}