Dela via


Behörigheter för filåtkomst

UWP-appar (Universal Windows Platform) kan som standard komma åt vissa filsystemplatser. Appar kan också komma åt ytterligare platser via filväljaren eller genom att deklarera funktioner.

Platser som UWP-appar kan komma åt

När du skapar en ny app kan du som standard komma åt följande filsystemplatser:

Programinstallationskatalog

Mappen där appen är installerad på användarens system.

Det finns två huvudsakliga sätt att komma åt filer och mappar i appens installationskatalog:

  1. Du kan hämta en StorageFolder som representerar appens installationskatalog, så här:

    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;
    

    Du kan sedan komma åt filer och mappar i katalogen med hjälp av StorageFolder-metoder . I exemplet lagras den här StorageFolder i variabeln installDirectory . Du kan lära dig mer om att arbeta med ditt apppaket och installera katalogen från Exempel på apppaketinformation på GitHub.

  2. Du kan hämta en fil direkt från appens installationskatalog med hjälp av en app-URI, så här:

    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
    });
    

    När GetFileFromApplicationUriAsync har slutförts returneras en StorageFile som representerar file.txt filen i appens installationskatalog (file i exemplet).

    Prefixet "ms-appx:///" i URI:n refererar till appens installationskatalog. Du kan lära dig mer om hur du använder app-URI:er i Använda URI:er för att referera till innehåll.

Dessutom, och till skillnad från andra platser, kan du också komma åt filer i appinstallationskatalogen med hjälp av vissa Win32- och COM för UWP-appar (Universal Windows Platform) och vissa C/C++ Standard Library-funktioner från Microsoft Visual Studio.

Appens installationskatalog är en skrivskyddad plats. Du kan inte få åtkomst till installationskatalogen via filväljaren.

Åtkomst till programdataplatser

Mapparna där din app kan lagra data. Dessa mappar (lokala, centrala och tillfälliga) skapas när din app installeras.

Det finns två huvudsakliga sätt att komma åt filer och mappar från appens dataplatser:

  1. Använd ApplicationData egenskaper för att hämta en appdatalagringsmapp.

    Du kan till exempel använda ApplicationData. LocalFolder för att hämta en StorageFolder som representerar appens lokala mapp så här:

    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;
    

    Om du vill komma åt appens roaming- eller tillfälliga mapp använder du egenskapen RoamingFolder eller TemporaryFolder i stället.

    När du har hämtat en StorageFolder som representerar en appdataplats kan du komma åt filer och mappar på den platsen med hjälp av StorageFolder-metoder . I exemplet lagras dessa StorageFolder-objekt i variabeln localFolder . Du kan lära dig mer om hur du använder appdataplatser från vägledningen på sidan ApplicationData-klass och genom att ladda ned programdataexemplet från GitHub.

  2. Du kan hämta en fil direkt från appens lokala mapp med hjälp av en app-URI, så här:

    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
    });
    

    När GetFileFromApplicationUriAsync har slutförts returneras en StorageFile som representerar file.txt filen i appens lokala mapp (file i exemplet).

    Prefixet "ms-appdata:///local/" i URI:n refererar till appens lokala mapp. Om du vill komma åt filer i appens centrala eller tillfälliga mappar använder du "ms-appdata:///roaming/" eller "ms-appdata:///temporary/" i stället. Du kan lära dig mer om att använda app-URI:er i Läsa in filresurser.

Dessutom, och till skillnad från andra platser, kan du också komma åt filer på dina appdataplatser med hjälp av vissa Win32- och COM-appar för UWP-appar och vissa C/C++-standardbiblioteksfunktioner från Visual Studio.

Du kan inte komma åt de lokala, centrala eller tillfälliga mapparna via filväljaren.

Få åtkomst till flyttbara enheter

Dessutom kan din app komma åt vissa av filerna på anslutna enheter som standard. Det här är ett alternativ om din app använder tillägget AutoPlay, för att starta automatiskt när användare ansluter en enhet, till exempel en kamera eller ett USB-minne, till systemet. Filerna som appen kan komma åt är begränsade till specifika filtyper som anges via deklarationer för filtypsassociation i appmanifestet.

Naturligtvis kan du också få åtkomst till filer och mappar på en flyttbar enhet genom att anropa filväljaren (med FileOpenPicker och FolderPicker) och låta användaren välja filer och mappar för din app att komma åt. Lär dig hur du använder filväljaren i Öppna filer och mappar med en väljare.

Anmärkning

Mer information om hur du kommer åt ett SD-kort eller andra flyttbara enheter finns i Åtkomst till SD-kortet.

Användarens mapp för nedladdningar

Mappen där nedladdade filer sparas som standard.

Som standard kan din app bara komma åt filer och mappar i användarens mapp För nedladdningar som din app har skapat. Du kan dock få åtkomst till filer och mappar i användarens mapp För nedladdningar genom att anropa en filväljare (FileOpenPicker eller FolderPicker) så att användarna kan navigera och välja filer eller mappar som appen ska komma åt.

  • Du kan skapa en fil i användarens nedladdningsmapp så här:

    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 är överbelastat så att du kan ange vad systemet ska göra om det redan finns en befintlig fil i mappen Downloads som har samma namn. När dessa metoder har slutförts returnerar de en StorageFile som representerar filen som skapades. Den här filen anropas newFile i exemplet.

  • Du kan skapa en undermapp i användarens mapp För nedladdningar så här:

    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 är överbelastat så att du kan ange vad systemet ska göra om det redan finns en befintlig undermapp i mappen Downloads som har samma namn. När dessa metoder har slutförts returnerar de en StorageFolder som representerar den undermapp som skapades. Den här filen anropas newFolder i exemplet.

Åtkomst till ytterligare platser

Förutom standardplatserna kan en app komma åt ytterligare filer och mappar genom att deklarera funktioner i appmanifestet eller genom att anropa en filväljare så att användaren kan välja filer och mappar som appen ska komma åt.

Appar som deklarerar AppExecutionAlias-tillägget har filsystembehörigheter från katalogen som de startas från i konsolfönstret och nedåt.

Behålla åtkomsten till filer och mappar

När din app hämtar en fil eller mapp via en väljare, en filaktivering, en dra och släpp-åtgärd osv. har den bara åtkomst till filen eller mappen tills appen har avslutats. Om du vill komma åt filen eller mappen automatiskt i framtiden kan du lägga till den i FutureAccessList så att din app lätt kan komma åt objektet i framtiden. Du kan också använda MostRecentlyUsedList för att enkelt hantera en lista över nyligen använda filer.

Funktioner för att komma åt andra platser

I följande tabell visas ytterligare platser som du kan komma åt genom att deklarera en eller flera funktioner och använda det associerade Windows.Storage-API :et.

Plats Kapacitet Windows.Storage API
Alla filer som användaren har åtkomst till. Till exempel: dokument, bilder, foton, nedladdningar, skrivbord, OneDrive osv. broadFileSystemAccess

Det här är en begränsad funktion. Åtkomst kan konfigureras i Inställningar>Sekretessfilsystem>. Eftersom användare kan bevilja eller neka behörigheten när som helst i Inställningar bör du se till att din app är motståndskraftig mot dessa ändringar. Om du upptäcker att din app inte har åtkomst kan du välja att uppmana användaren att ändra inställningen genom att ange en länk till windows-filsystemets åtkomst och sekretessartikel . Observera att användaren måste stänga appen, växla inställningen och starta om appen. Om de ändrar inställningen medan appen körs, kommer plattformen att pausa din app så att du kan spara dess tillstånd, och sedan tvångsavsluta appen för att tillämpa den nya inställningen. I april 2018-uppdateringen är standardvärdet för behörigheten På. I uppdateringen från oktober 2018 är standardvärdet Av.

Om du skickar en app till Store som deklarerar den här funktionen måste du ange ytterligare beskrivningar av varför din app behöver den här funktionen och hur den tänker använda den.

Den här funktionen fungerar för API:er i Windows.Storage-namnområdet . Se avsnittet Exempel i slutet av den här artikeln för ett exempel på hur du aktiverar den här funktionen i din app.

Obs! Den här funktionen stöds inte på Xbox.
Inte tillämpligt
Dokument dokumentbibliotek

Obs! Du måste lägga till filtypsassociationer i appmanifestet som deklarerar specifika filtyper som appen kan komma åt på den här platsen.

Använd den här funktionen om din app:
– Underlättar plattformsoberoende offlineåtkomst till specifikt OneDrive-innehåll med giltiga OneDrive-URL:er eller resurs-ID:er
– Sparar öppna filer till användarens OneDrive automatiskt när du är offline
KändaMappar.Dokumentbibliotek
Musik musikbibliotek
Se även Filer och mappar i biblioteken Musik, Bilder och Videor.
KnownFolders.MusicLibrary
Bilder Bilderbibliotek
Se även Filer och mappar i biblioteken Musik, Bilder och Videor.
KnownFolders.Bildbibliotek
Videoklipp videobibliotek
Se även Filer och mappar i biblioteken Musik, Bilder och Videor.
KändaMappar.Videobiblioteket
Flyttbara enheter flyttbar lagring

Observera Du måste lägga till filtypsassociationer i appmanifestet som deklarerar specifika filtyper som appen kan komma åt på den här platsen.

Se även Åtkomst till SD-kortet.
KnownFolders.UrtagbaraEnheter
Hemgruppsbibliotek Minst en av följande funktioner behövs.
- musikbibliotek
- bilderbibliotek
- videobibliotek
KändaMappar.Hemgrupp
Media Server-enheter (DLNA) Minst en av följande funktioner behövs.
- musikbibliotek
- bilderbibliotek
- videobibliotek
KnownFolders.MediaServerEnheter
UNC-mappar (Universal Naming Convention) En kombination av följande funktioner krävs.

Funktionen för hem- och arbetsnätverk:
- privatNätverksKlientServer

Och minst en internet- och offentlig nätverksfunktion:
- internetClient
- internetklientserver

Och, om tillämpligt, funktionen för domänautentiseringsuppgifter:
- företagsautentisering

Not: Du måste lägga till filtypsassociationer i appmanifestet som deklarerar specifika filtyper som appen kan komma åt på den här platsen.
Hämta en mapp med hjälp av:
StorageFolder.GetFolderFromPathAsync

Hämta en fil med hjälp av:
StorageFile.GetFileFromPathAsync

Exempel

Det här exemplet lägger till den begränsade broadFileSystemAccess kapabiliteten. Förutom att ange funktionen måste namnområdet läggas till rescap och även till IgnorableNamespaces.

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

Anmärkning

En fullständig lista över appfunktioner finns i Appkapacitetsdeklarationer.