Una delle limitazioni imposte dalla Universal Windows Platform è che, grazie alla sandbox e agli standard di sicurezza messi a disposizione dalla piattaforma, non è possibile accedere a contenuti che si trovano in posizioni diverse dalle cartella Documenti, Foto e Video. Con l'ultimo update di Windows 10, è stata aggiunta una nuova capability, chiamata broadFileSystemAccess che serve proprio ad ovviare a questo problema e permette la scrittura in una parte qualsiasi del filesystem a cui l'utente stesso che sta eseguendo l'applicazione ha accesso.
Per aggiungere questa capability, è necessario aggiungere anche il namespace dedicato all'interno del file Package.appxmanifest:
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" IgnorableNamespaces="uap mp rescap" <!-- --> <Capabilities> <rescap:Capability Name="broadFileSystemAccess" /> </Capabilities>
Come si può notare, però, questo nuovo namespace fa parte delle restricted capability: qualora l'applicazione venga distribuita tramite lo store, verrà eseguito un ulteriore passaggio di analisi prima della pubblicazione e verrà richiesto il motivo per la quale l'applicazione richiede questo particolare accesso e quali benefici porterà agli utenti.
Una volta configurato il file di manifest, si può richiedere l'accesso ad un qualsiasi percorso di sistema (tenendo cura dei permessi di accesso) ed elencare, come dimostra l'esempio seguente, tutti i file presenti nelle cartelle (ed eventuali sotto-cartelle):
protected override async void OnNavigatedTo(NavigationEventArgs e) { await GetFiles(@"C:\Users\aspitalia\Desktop"); } private async Task GetFiles(string path) { if (string.IsNullOrEmpty(path)) return; try { var folder = await StorageFolder.GetFolderFromPathAsync(path); var folders = await folder.GetFoldersAsync(); foreach (StorageFolder directory in folders) { var files = await directory.GetFilesAsync(); foreach (StorageFile file in files) { Debug.WriteLine($"Found {file.Name} in {directory.Name}"); } } } catch (Exception ex) { Debug.WriteLine(ex.Message); } }
Le API messe a disposizione dal framework sono identiche a quelle già utilizzate in precedenza per accedere, ad esempio, alla cartella Documenti, pertanto non è necessario andare a personalizzare eventuale codice pre-esistente.
Il codice sorgente di questo script è disponibile su GitHub al seguente indirizzo https://github.com/aspitalia/scripts-windows/tree/master/script-200
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Assegnare un valore di default a un parametro di una lambda in C#
Sfruttare lo streaming di una chiamata Http da Blazor
Gestire domini wildcard in Azure Container Apps
Utilizzare Model as a Service su Microsoft Azure
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Utilizzare QuickGrid di Blazor con Entity Framework
Utilizzare il trigger SQL con le Azure Function
Creazione di plugin per Tailwind CSS: espandere le funzionalità del framework dinamicamente
Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
Eseguire operazioni sui blob con Azure Storage Actions
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
I più letti di oggi
- Utilizzare Docker Compose con Azure App Service
- Utilizzare QuickGrid di Blazor con Entity Framework
- Modernizzare le applicazioni WPF e Windows Forms con Blazor
- ASP 3 per esempi
- annunciato #netstandard 2.1. .NET Core lo supporterà a partire da #netcore3, così come le prossime versione di #xamarin, #mono e #unity.il supporto per #netfx 4.8, invece, non ci sarà. https://aspit.co/bq2