Autorizzazioni di accesso ai file

Le app della piattaforma UWP (Universal Windows Platform) possono accedere a determinati percorsi nel file system per impostazione predefinita. Le app possono anche accedere ad altri percorsi tramite la selezione file o la dichiarazione delle funzionalità.

Percorsi accessibili dalle app UWP

Quando si crea una nuova app, è possibile accedere per impostazione predefinita ai percorsi seguenti nel file system:

Directory di installazione dell'applicazione

Cartella in cui viene installata l'app nel sistema dell'utente.

Ci sono due modi principali per accedere a file e cartelle nella directory di installazione dell'app:

  1. È possibile recuperare un oggetto StorageFolder che rappresenta la directory di installazione dell'app, come in questo modo:

    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;
    

    SI può quindi accedere ai file e alle cartelle della directory usando i metodi StorageFolder. In questo esempio l'oggetto StorageFolder è archiviato nella variabile installDirectory. Per altre informazioni su come utilizzare il pacchetto e la directory di installazione dell'app con l'esempio di informazioni del pacchetto di un app su GitHub.

  2. È possibile recuperare un file direttamente dalla directory di installazione dell'app mediante un URI, nel modo seguente:

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

    Al termine di GetFileFromApplicationUriAsync viene restituito un oggetto StorageFile che rappresenta il file file.txt nella directory di installazione dell'app (file nell'esempio).

    Il prefisso "ms-appx:///" nell'URI fa riferimento alla directory di installazione dell'app. Per altre informazioni sull'uso degli URI delle app, vedere Come usare gli URI per fare riferimento ai contenuti.

Inoltre, a differenza di altri percorsi, è possibile accedere ai file nella directory di installazione dell'app anche con alcune API Win32 e COM per app della piattaforma UWP (Universal Windows Platform) e alcune funzioni della libreria Standard C/C++ di Microsoft Visual Studio.

La directory di installazione dell'app è un percorso di sola lettura. Non è possibile ottenere accesso alla directory di installazione tramite la selezione file.

Accedere ai percorsi dei dati dell'applicazione

Cartelle in cui possono essere archiviati i dati dell'app. Queste cartelle (locale, roaming e temporanea) vengono create durante l'installazione dell'app.

Esistono due modi principali per accedere a file e cartelle nei percorsi dei dati dell'app:

  1. Usare le proprietà ApplicationData per recuperare la cartella dati di un'app.

    Si può ad esempio usare ApplicationData.LocalFolder per recuperare un oggetto StorageFolder che rappresenta la cartella locale dell'app in questo modo:

    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;
    

    Se si vuole accedere alla cartella roaming o temporanea dell'app, usare invece la proprietà RoamingFolder o TemporaryFolder.

    Dopo aver recuperato un oggetto StorageFolder che rappresenta un percorso dei dati dell'app, è possibile accedere ai file e alle cartelle nel percorso in questione mediante i metodi StorageFolder. Nell'esempio questi oggetti StorageFolder sono archiviati nella variabile localFolder. Per altre informazioni sull'utilizzo dei percorsi dei dati dell'app dalle indicazioni contenute nella pagina Classe ApplicationData pagina e scaricando l'esempio di dati dell'applicazione da GitHub.

  2. È possibile recuperare un file direttamente dalla cartella locale dell'app mediante un URI, nel modo seguente:

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

    Al termine di GetFileFromApplicationUriAsync viene restituito un oggetto StorageFile che rappresenta il file file.txt nella cartella locale dell'app (file nell'esempio).

    Il prefisso "ms-appdata:///local/" nell'URI fa riferimento alla cartella locale dell'app. Per accedere ai file nelle cartelle roaming o temporanee di un'app, usare invece "ms-appdata:///roaming/" o "ms-appdata:///temporary/". Per altre informazioni sull'uso di URI delle app, vedere Come caricare risorse di file.

Inoltre, a differenza di altri percorsi, si può accedere ai file nei percorsi dei dati dell'app anche usando alcune API Win32 e COM per app della piattaforma UWP (Universal Windows Platform) e alcune funzioni della libreria Standard C/C++ di Microsoft Visual Studio.

Non è possibile accedere alle cartelle locali, roaming e temporanee tramite la selezione file.

Accedere ai dispositivi rimovibili

L'app può anche accedere per impostazione predefinita ad alcuni file nei dispositivi connessi. Questo è possibile se l'app usa l'estensione AutoPlay per l'avvio automatico quando gli utenti connettono un dispositivo al sistema, ad esempio una fotocamera o una chiavetta USB. I file a cui l'app può accedere sono limitati a tipi specifici impostati tramite le dichiarazioni delle associazioni dei tipi di file nel manifesto dell'app.

Ovviamente, è anche possibile accedere ai file e alle cartelle in un dispositivo rimovibile chiamando il selettore file (mediante FileOpenPicker e FolderPicker) e permettendo all'utente di selezionare i file e le cartelle a cui accedere con l'app. Per scoprire come usare la selezione file, vedere Aprire file e cartelle con una selezione.

Nota

Per altre informazioni sull'accesso a una scheda SD o ad altri dispositivi rimovibili, vedere Accedere alla scheda SD.

Cartella Download dell'utente

Cartella in cui vengono salvati i file scaricati per impostazione predefinita.

Per impostazione predefinita, l'app può accedere solo ai file e alle cartelle all'interno della cartella Download dell'utente creata dall'app stessa. È tuttavia possibile ottenere accesso a file e cartelle nella cartella Download dell'utente chiamando un selettore file (FileOpenPicker o FolderPicker) in modo che gli utenti possano individuare e selezionare i file e le cartelle a cui accedere tramite l'app.

  • È possibile creare un file nella cartella Download dell'utente come segue:

    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 è in overload, per cui è possibile specificare le azioni che devono essere eseguite dal sistema se nella cartella Download è già presente un file con lo stesso nome. Dopo il completamento dei metodi viene restituito un oggetto StorageFile che rappresenta il file creato. Questo file è denominato newFile nell'esempio.

  • È possibile creare una sottocartella nella cartella Download dell'utente in questo modo:

    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 è in overload, per cui è possibile specificare le azioni che devono essere eseguite dal sistema se nella cartella Download è già presente una sottocartella con lo stesso nome. Dopo il completamento dei metodi viene restituito un oggetto StorageFolder che rappresenta la sottocartella creata. Questo file è denominato newFolder nell'esempio.

Accesso ad altri percorsi

Oltre ai percorsi predefiniti, un'app può accedere ad altri file e cartelle dichiarando le funzionalità nel proprio manifesto oppure chiamando una selezione file per permettere all'utente di selezionare file e cartelle a cui accedere con l'app.

Le app che dichiarano l'estensione AppExecutionAlias ottengono le autorizzazioni per il file system dalla directory da cui vengono avviate nella finestra della console e verso il basso.

Conservazione dell'accesso a file e cartelle

Quando l'app recupera una cartella o un file tramite uno strumento di selezione, un'attivazione di file, un'operazione di trascinamento della selezione e così via, può accedere a tale cartella o file solo finché non viene terminata. Se si vuole accedere automaticamente alla cartella o al file in futuro, è possibile aggiungere l'elemento a FutureAccessList in modo che l'app possa accedervi immediatamente in futuro. È inoltre possibile usare MostRecentlyUsedList per gestire facilmente un elenco dei file usati di recente.

Funzionalità per l'accesso ad altri percorsi

La tabella seguente contiene gli altri percorsi cui puoi accedere dichiarando una o più funzionalità e usando l'API Windows.Storage associata.

Titolo Funzionalità API Windows.Storage
Tutti i file accessibili dall'utente. Ad esempio: documenti, immagini, foto, download, desktop, OneDrive e così via. broadFileSystemAccess

Si tratta di una funzionalità con restrizioni. L'accesso è configurabile in Impostazioni>Privacy>File system. Poiché gli utenti possono concedere o rifiutare l'autorizzazione in qualsiasi momento in Impostazioni, è necessario assicurarsi che l'app sia resiliente a tali modifiche. Se si ritiene che l'app non disponga dell'accesso, è possibile scegliere di richiedere all'utente di cambiare l'impostazione fornendo un collegamento per l'articolo relativo all'accesso al file system e alla privacy di Windows 10. Nota: l'utente deve chiudere l'app, attivare o disattivare l'impostazione e riavviare l'app. Se si attiva/disattiva l'impostazione mentre l'app è in esecuzione, la piattaforma sospenderà l'app in modo che sia possibile salvare lo stato, quindi forzare l'arresto dell'app per poter applicare la nuova impostazione. Nell'aggiornamento di aprile 2018, l'impostazione predefinita per l'autorizzazione è attiva. Nell'aggiornamento di ottobre 2018, l'impostazione predefinita per l'autorizzazione è disattivata.

Se si invia un'app allo Store che dichiara questa funzionalità, fornire altre descrizioni del perché l'app richiede questa funzionalità e di come intende usarla.

Questa funzionalità è valida per le API nello spazio dei nomi Windows.Storage. Vedere la sezione diesempio alla fine di questo articolo per un esempio di come abilitare questa funzionalità nell'app.

Nota: questa funzionalità non è supportata in Xbox.
n/d
Documenti documentsLibrary

Nota: aggiungere associazioni di tipi di file al manifesto dell'app per dichiarare gli specifici tipi di file a cui l'app può accedere in questo percorso.

Usare questa funzionalità se l'app:
- Facilita l'accesso offline multipiattaforma a specifici contenuti di OneDrive mediante URL di OneDrive o ID risorsa validi
- Salva automaticamente nell'area OneDrive dell'utente i file aperti mentre è attiva la modalità offline
KnownFolders.DocumentsLibrary
Musica musicLibrary
Vedere anche File e cartelle nelle raccolte Musica, Immagini e Video.
KnownFolders.MusicLibrary
Immagini picturesLibrary
Vedere anche File e cartelle nelle raccolte Musica, Immagini e Video.
KnownFolders.PicturesLibrary
Video videosLibrary
Vedere anche File e cartelle nelle raccolte Musica, Immagini e Video.
KnownFolders.VideosLibrary
Dispositivi rimovibili removableStorage

Nota: aggiungere associazioni di tipi di file al manifesto dell'app per dichiarare gli specifici tipi di file a cui l'app può accedere in questo percorso.

Vedere anche Accedere alla scheda SD.
KnownFolders.RemovableDevices
Raccolte del gruppo Home È necessaria almeno una delle funzionalità seguenti.
- musicLibrary
- picturesLibrary
- videosLibrary
KnownFolders.HomeGroup
Dispositivi server multimediali (DLNA) È necessaria almeno una delle funzionalità seguenti.
- musicLibrary
- picturesLibrary
- videosLibrary
KnownFolders.MediaServerDevices
Cartelle UNC (Universal Naming Convention) È necessaria una combinazione delle funzionalità seguenti.

Funzionalità delle reti domestiche e aziendali:
- privateNetworkClientServer

E almeno una funzionalità delle reti pubbliche e Internet:
- internetClient
- internetClientServer

E, se applicabile, la funzionalità delle credenziali di dominio:
- enterpriseAuthentication

Nota: aggiungere associazioni di tipi di file al manifesto dell'app per dichiarare gli specifici tipi di file a cui l'app può accedere in questo percorso.
Recuperare una cartella usando:
StorageFolder.GetFolderFromPathAsync

Recuperare un file usando:
StorageFile.GetFileFromPathAsync

Esempio

In questo esempio viene aggiunta la funzionalità broadFileSystemAccess con restrizioni. Oltre a specificare la funzionalità, il rescap dello spazio dei nomi deve essere aggiunto e viene inoltre aggiunto a IgnorableNamespaces.

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

Nota

Per un elenco completo di funzionalità dell'app, vedere Dichiarazioni di funzionalità delle app.