Delen via


Machtigingen voor bestandstoegang

UWP-apps (Universal Windows Platform) hebben standaard toegang tot bepaalde bestandssysteemlocaties. Apps hebben ook toegang tot extra locaties via de bestandskiezer of door mogelijkheden te declareren.

Locaties waartoe UWP-apps toegang hebben

Wanneer u een nieuwe app maakt, hebt u standaard toegang tot de volgende bestandssysteemlocaties:

Installatiemap van de applicatie

De map waarin uw app is geïnstalleerd op het systeem van de gebruiker.

Er zijn twee primaire manieren om toegang te krijgen tot bestanden en mappen in de installatiemap van uw app:

  1. U kunt een StorageFolder- ophalen die de installatiemap van uw app vertegenwoordigt, zoals deze:

    Windows.Storage.StorageFolder installedLocation = Windows.ApplicationModel.Package.Current.InstalledLocation;
    
    var installDirectory = Windows.ApplicationModel.Package.current.installedLocation;
    
    #include <winrt/Windows.Storage.h>
    ...
    Windows::Storage::StorageFolder installedLocation{ Windows::ApplicationModel::Package::Current().InstalledLocation() };
    
    Windows::Storage::StorageFolder^ installedLocation = Windows::ApplicationModel::Package::Current->InstalledLocation;
    

    Vervolgens kunt u bestanden en mappen in de map openen met behulp van StorageFolder methoden. In het voorbeeld wordt deze StorageFolder- opgeslagen in de variabele installDirectory. Op GitHub kunt u in het voorbeeld van app-pakketinformatie meer te weten komen over het werken met uw app-pakket en de installatiemap.

  2. U kunt een bestand rechtstreeks ophalen uit de installatiemap van uw app met behulp van een app-URI, zoals deze:

    using Windows.Storage;            
    StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///file.txt"));
    
    Windows.Storage.StorageFile.getFileFromApplicationUriAsync("ms-appx:///file.txt").done(
        function(file) {
            // Process file
        }
    );
    
    Windows::Foundation::IAsyncAction ExampleCoroutineAsync()
    {
        Windows::Storage::StorageFile file{
            co_await Windows::Storage::StorageFile::GetFileFromApplicationUriAsync(Windows::Foundation::Uri{L"ms-appx:///file.txt"})
        };
        // Process file
    }
    
    auto getFileTask = create_task(StorageFile::GetFileFromApplicationUriAsync(ref new Uri("ms-appx:///file.txt")));
    getFileTask.then([](StorageFile^ file) 
    {
        // Process file
    });
    

    Wanneer GetFileFromApplicationUriAsync is voltooid, wordt een StorageFile- geretourneerd die het file.txt bestand in de installatiemap van de app vertegenwoordigt (file in het voorbeeld).

    Het voorvoegsel ms-appx:///in de URI verwijst naar de installatiemap van de app. Meer informatie over het gebruik van app-URI's vindt u in URI's gebruiken om te verwijzen naar inhoud.

Bovendien kunt u, in tegenstelling tot andere locaties, ook toegang krijgen tot bestanden in uw app-installatiemap met behulp van sommige Win32- en COM voor UWP-apps (Universal Windows Platform) en enkele C/C++ Standard Library-functies van Microsoft Visual Studio.

De installatiemap van de app is een alleen-lezen locatie. U kunt geen toegang krijgen tot de installatiemap via de bestandskiezer.

Toegang tot toepassingsgegevenslocaties

De mappen waarin uw app gegevens kan opslaan. Deze mappen (lokaal, roaming en tijdelijk) worden gemaakt wanneer uw app is geïnstalleerd.

Er zijn twee primaire manieren om toegang te krijgen tot bestanden en mappen vanaf de gegevenslocaties van uw app:

  1. Gebruik ApplicationData eigenschappen om een app-gegevensmap op te halen.

    U kunt bijvoorbeeld ApplicationData-gebruiken.LocalFolder om een StorageFolder- op te halen die de lokale map van uw app als volgt vertegenwoordigt:

    using Windows.Storage;
    StorageFolder localFolder = ApplicationData.Current.LocalFolder;
    
    var localFolder = Windows.Storage.ApplicationData.current.localFolder;
    
    Windows::Storage::StorageFolder storageFolder{
        Windows::Storage::ApplicationData::Current().LocalFolder()
    };
    
    using namespace Windows::Storage;
    StorageFolder^ storageFolder = ApplicationData::Current->LocalFolder;
    

    Als u de roaming- of tijdelijke map van uw app wilt openen, gebruik dan de eigenschap RoamingFolder of TemporaryFolder.

    Nadat u een StorageFolder- hebt opgehaald die een app-gegevenslocatie vertegenwoordigt, hebt u toegang tot bestanden en mappen op die locatie met behulp van StorageFolder methoden. In het voorbeeld worden deze StorageFolder--objecten opgeslagen in de variabele localFolder. Meer informatie over het gebruik van app-gegevenslocaties vindt u in de richtlijnen op de ApplicationData-klasse pagina en door het voorbeeld van toepassingsgegevens te downloaden vanuit GitHub.

  2. U kunt een bestand rechtstreeks ophalen uit de lokale map van uw app met behulp van een app-URI, zoals deze:

    using Windows.Storage;
    StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata:///local/file.txt"));
    
    Windows.Storage.StorageFile.getFileFromApplicationUriAsync("ms-appdata:///local/file.txt").done(
        function(file) {
            // Process file
        }
    );
    
    Windows::Storage::StorageFile file{
        co_await Windows::Storage::StorageFile::GetFileFromApplicationUriAsync(Windows::Foundation::Uri{ L"ms-appdata:///local/file.txt" })
    };
    // Process file
    
    using Windows::Storage;
    auto getFileTask = create_task(StorageFile::GetFileFromApplicationUriAsync(ref new Uri("ms-appdata:///local/file.txt")));
    getFileTask.then([](StorageFile^ file) 
    {
        // Process file
    });
    

    Wanneer GetFileFromApplicationUriAsync voltooid, wordt een StorageFile- geretourneerd die het file.txt bestand in de lokale map van de app vertegenwoordigt (file in het voorbeeld).

    Het voorvoegsel ms-appdata:///local/in de URI verwijst naar de lokale map van de app. Als u toegang wilt krijgen tot bestanden in de roaming- of tijdelijke mappen van de app, gebruikt u in plaats daarvan "ms-appdata:///roaming/" of "ms-appdata:///temporary/". Meer informatie over het gebruik van app-URI's vindt u in Het laden van bestandsresources.

Daarnaast kunt u, in tegenstelling tot andere locaties, ook toegang krijgen tot bestanden in uw app-gegevenslocaties met behulp van een aantal Win32- en COM voor UWP-apps en sommige C/C++ Standard Library-functies van Visual Studio.

U hebt geen toegang tot de lokale, zwervende of tijdelijke mappen via de bestandskiezer.

Toegang tot verwisselbare apparaten

Daarnaast heeft uw app standaard toegang tot een aantal bestanden op verbonden apparaten. Dit is een optie als uw app gebruikmaakt van de AutoPlay-extensie automatisch te starten wanneer gebruikers een apparaat, zoals een camera of USB-duimstation, aansluiten op hun systeem. De bestanden waartoe uw app toegang heeft, zijn beperkt tot specifieke bestandstypen die zijn opgegeven via declaraties van bestandstypekoppelingen in uw app-manifest.

Natuurlijk kunt u ook toegang krijgen tot bestanden en mappen op een verwisselbaar apparaat door de bestandskiezer aan te roepen (met behulp van FileOpenPicker en FolderPicker) en de gebruiker bestanden en mappen te laten kiezen voor uw app. Meer informatie over het gebruik van de bestandskiezer in Bestanden en mappen openen met een kiezer.

Opmerking

Zie Toegang tot de SD-kaartvoor meer informatie over het openen van een SD-kaart of andere verwisselbare apparaten.

De Downloadmap van de gebruiker

De map waarin gedownloade bestanden standaard worden opgeslagen.

Uw app heeft standaard alleen toegang tot bestanden en mappen in de map Downloads van de gebruiker die uw app heeft gemaakt. U kunt echter toegang krijgen tot bestanden en mappen in de map Downloads van de gebruiker door een bestandskiezer aan te roepen (FileOpenPicker of FolderPicker) zodat gebruikers kunnen navigeren en bestanden of mappen kunnen kiezen voor toegang tot uw app.

  • U kunt als volgt een bestand maken in de map Downloads van de gebruiker:

    using Windows.Storage;
    StorageFile newFile = await DownloadsFolder.CreateFileAsync("file.txt");
    
    Windows.Storage.DownloadsFolder.createFileAsync("file.txt").done(
        function(newFile) {
            // Process file
        }
    );
    
    Windows::Storage::StorageFile newFile{
        co_await Windows::Storage::DownloadsFolder::CreateFileAsync(L"file.txt")
    };
    // Process file
    
    using Windows::Storage;
    auto createFileTask = create_task(DownloadsFolder::CreateFileAsync(L"file.txt"));
    createFileTask.then([](StorageFile^ newFile)
    {
        // Process file
    });
    

    DownloadsFolder-.CreateFileAsync- overbelast is, zodat u kunt opgeven wat het systeem moet doen als er al een bestaand bestand in de map Downloads met dezelfde naam staat. Wanneer deze methoden zijn voltooid, retourneren ze een StorageFile- die het bestand vertegenwoordigt dat is gemaakt. Dit bestand wordt newFile genoemd in het voorbeeld.

  • U kunt als volgt een submap maken in de map Downloads van de gebruiker:

    using Windows.Storage;
    StorageFolder newFolder = await DownloadsFolder.CreateFolderAsync("New Folder");
    
    Windows.Storage.DownloadsFolder.createFolderAsync("New Folder").done(
        function(newFolder) {
            // Process folder
        }
    );
    
    Windows::Storage::StorageFolder newFolder{
        co_await Windows::Storage::DownloadsFolder::CreateFolderAsync(L"New Folder")
    };
    // Process folder
    
    using Windows::Storage;
    auto createFolderTask = create_task(DownloadsFolder::CreateFolderAsync(L"New Folder"));
    createFolderTask.then([](StorageFolder^ newFolder)
    {
        // Process folder
    });
    

    DownloadsFolder-.CreateFolderAsync- overbelast is, zodat u kunt opgeven wat het systeem moet doen als er al een bestaande submap in de map Downloads met dezelfde naam staat. Wanneer deze methoden zijn voltooid, retourneren ze een StorageFolder- die de submap vertegenwoordigt die is gemaakt. Dit bestand wordt newFolder genoemd in het voorbeeld.

Toegang tot extra locaties

Naast de standaardlocaties heeft een app toegang tot extra bestanden en mappen door mogelijkheden te declareren in het app-manifest of door een bestandskiezer aan te roepen om de gebruiker bestanden en mappen te laten kiezen voor toegang tot de app.

Apps die de AppExecutionAlias extensie declareren, hebben machtigingen voor het bestandssysteem van de map waaruit ze worden gestart in het consolevenster en omlaag.

Toegang tot bestanden en mappen behouden

Wanneer uw app een bestand of map ophaalt via een kiezer, een bestandsactivering, een bewerking voor slepen en neerzetten, enzovoort, heeft deze alleen toegang tot dat bestand of die map totdat de app is beëindigd. Als u in de toekomst automatisch toegang wilt krijgen tot het bestand of de map, kunt u het toevoegen aan de FutureAccessList-, zodat uw app in de toekomst gemakkelijk toegang heeft tot dat item. U kunt ook de MostRecentlyUsedList gebruiken om eenvoudig een lijst met recent gebruikte bestanden te beheren.

Mogelijkheden voor toegang tot andere locaties

De volgende tabel bevat aanvullende locaties waartoe u toegang hebt door een of meer mogelijkheden te declareren en de bijbehorende Windows.Storage-API te gebruiken.

Locatie Vermogen Windows.Storage-API
Alle bestanden waartoe de gebruiker toegang heeft. Bijvoorbeeld: documenten, afbeeldingen, foto's, downloads, bureaublad, OneDrive, enzovoort. BredeToegangTotBestandssysteem

Dit is een beperkte mogelijkheid. Access kan worden geconfigureerd in Instellingen>Privacy>Bestandssysteem. Omdat gebruikers de machtiging op elk gewenst moment in Instellingenkunnen verlenen of weigeren, moet u ervoor zorgen dat uw app bestand is tegen deze wijzigingen. Als u merkt dat uw app geen toegang heeft, kunt u ervoor kiezen om de gebruiker te vragen de instelling te wijzigen door een koppeling naar het toegangs- en privacyartikel voor het Windows-bestandssysteem op te geven. Houd er rekening mee dat de gebruiker de app moet sluiten, de instelling moet in- of uitschakelen en de app opnieuw moet starten. Als ze de instelling in-/uitschakelen terwijl de app wordt uitgevoerd, wordt uw app door het platform onderbroken, zodat u de status kunt opslaan en vervolgens de app geforceerd beëindigt om de nieuwe instelling toe te passen. In de update van april 2018 is de standaardwaarde voor de machtiging Ingeschakeld. In de update van oktober 2018 is de standaardwaarde uitgeschakeld.

Als u een app indient in de Store die deze mogelijkheid declareert, moet u aanvullende beschrijvingen opgeven van de reden waarom uw app deze mogelijkheid nodig heeft en hoe de app deze wil gebruiken.

Deze mogelijkheid werkt voor API's in de Windows.Storage naamruimte. Zie de sectie Voorbeeld aan het einde van dit artikel voor een voorbeeld van het inschakelen van deze mogelijkheid in uw app.

Opmerking: Deze mogelijkheid wordt niet ondersteund op Xbox.
n.v.t
Documenten documentenbibliotheek

Opmerking: U moet bestandstypeassociaties toevoegen aan uw app-manifest die specifieke bestandstypen declareren waartoe uw app toegang heeft op deze locatie.

Gebruik deze mogelijkheid als uw app:
- Vereenvoudigt platformoverschrijdende offlinetoegang tot specifieke OneDrive-inhoud met behulp van geldige OneDrive-URL's of resource-id's
- Hiermee worden geopende bestanden automatisch opgeslagen in OneDrive van de gebruiker terwijl deze offline is
BekendeMappen.DocumentenBibliotheek
Muziek musicLibrary
Zie ook bestanden en mappen in de bibliotheken Muziek, Afbeeldingen en Video's.
KnownFolders.MusicLibrary
Foto 's picturesLibrary -
Zie ook bestanden en mappen in de bibliotheken Muziek, Afbeeldingen en Video's.
KnownFolders.PicturesLibrary
Video's videosLibrary-
Zie ook bestanden en mappen in de bibliotheken Muziek, Afbeeldingen en Video's.
BekendeMappen.Videobibliotheek
Verwisselbare apparaten verwisselbare opslag

Opmerking: U moet bestandsassociaties aan uw app-manifest toevoegen die specifieke bestandstypen verklaren waartoe uw app toegang heeft op deze locatie.

Zie ook Toegang tot de SD-kaart.
KnownFolders.RemovableDevices
Thuisgroepbibliotheken Er is ten minste één van de volgende mogelijkheden nodig.
- muziekbibliotheek
- afbeeldingenBibliotheek
- videobibliotheek
BekendeMappen.Thuisgroep
Mediaserverapparaten (DLNA) Er is ten minste één van de volgende mogelijkheden nodig.
- muziekbibliotheek
- afbeeldingenBibliotheek
- videobibliotheek
KnownFolders.MediaServerDevices
UNC-mappen (Universal Naming Convention) Er is een combinatie van de volgende mogelijkheden nodig.

De mogelijkheid voor thuis- en werknetwerken:
- privaatNetwerkClientServer

En ten minste één mogelijkheid tot internet en openbare netwerken:
- internetClient
- internetClientServer

En, indien van toepassing, de mogelijkheid voor domeinreferenties:
- bedrijfsauthenticatie

Opmerking: U moet Bestandstypeassociaties toevoegen aan het app-manifest waarmee specifieke bestandstypen worden gespecificeerd waartoe uw app toegang heeft op deze locatie.
Een map ophalen met behulp van:
StorageFolder.GetFolderFromPathAsync -

Haal een bestand op met behulp van:
StorageFile.GetFileFromPathAsync

Voorbeeld

In dit voorbeeld worden de beperkte broadFileSystemAccess- mogelijkheid toegevoegd. Naast het specificeren van de functionaliteit moet de rescap-naamruimte worden toegevoegd en ook aan IgnorableNamespacesworden toegevoegd.

<Package
  ...
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap mp rescap">
...
<Capabilities>
    <rescap:Capability Name="broadFileSystemAccess" />
</Capabilities>

Opmerking

Zie App-declaratiesvoor een volledige lijst met app-mogelijkheden.