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:
È 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.È 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:
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.È 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. 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.