Nelle applicazioni che fanno uso intensivo dello storage, poiché magari effettuano download massivi di file, oppure perché fanno elaborazioni video/immagini con file raw, potrebbe fare comodo conoscere quanto spazio disponibile rimane sui dischi di sistema rispetto allo spazio già occupato per, eventualmente, proporre il salvataggio dei file in dischi secondari.
Per avere accesso ai dischi da un'applicazione Universal Windows Platform, dobbiamo, come abbiamo già visto in precedenza, aggiungere la capability broadFileSystemAccess all'interno del file di manifest:
<Package ... xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" IgnorableNamespaces="uap mp rescap"> <Capabilities> <rescap:Capability Name="broadFileSystemAccess" /> ... </Capabilities> </Package>
Poiché questa è una capability restricted, è necessario andare a livello di impostazioni di Windows per garantire l'accesso al file system per l'applicazione:
A questo punto, una volta importanto il namespace System.IO, possiamo accedere alle informazioni sui dischi accedendo alle proprietà di ogni singolo percorso di root dei dischi stessi (ad esempio C:\):
private async Task CalculateSpaceAsync() { const string freeSpace = "System.FreeSpace"; const string totalSpace = "System.Capacity"; // recupera tutti i drive di sistema var drives = DriveInfo.GetDrives(); foreach (var drive in drives) { try { // cerca di recuperare la cartella presente in fullname (es. C:\) var folder = await StorageFolder.GetFolderFromPathAsync(drive.RootDirectory.FullName); // recupera le proprietà della cartella var props = await folder.Properties.RetrievePropertiesAsync(new string[] { freeSpace, totalSpace }); // calcola spazio libero e totale in Gb var freeSpace = (UInt64)props[freeSpace] / (1024 * 1024 * 1024); var totalSpace = (UInt64)props[totalSpace] / (1024 * 1024 * 1024); Debug.WriteLine("Lo spazio disponibile è di {freeSpace}Gb su {totalSpace}Gb di disco"); } catch (Exception ex) { Debug.WriteLine($"Impossibile aprire il disco {drive.Name}"); } } }
Poiché lo spazio recuperato è calcolato di default in bytes, è stata applicata una correzione per avere un valore in una unità di misura più ragionevole come il Gb.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Ottenere un token di accesso per una GitHub App
Creare una libreria CSS universale: Immagini
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Gestione dei nomi con le regole @layer in CSS
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
Referenziare un @layer più alto in CSS
Migliorare la sicurezza dei prompt con Azure AI Studio
Utilizzare una qualunque lista per i parametri di tipo params in C#
Triggerare una pipeline su un altro repository di Azure DevOps
Sfruttare al massimo i topic space di Event Grid MQTT
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
I più letti di oggi
- Build 2015: segui con noi tutte le novità per gli sviluppatori in diretta da San Francisco
- Speciale Windows Live Services: come integrarli nelle proprie applicazioni
- Rilasciata la RTM di SQL Server 2012, la versione Express subito in download
- Build 2014: tutte le novità per gli sviluppatori in diretta da San Francisco
- .NET Managed provider per MySQL
- WS-I approva Basic Profile 1.0
- Due regali dal Tech-Ed USA 2004: WSE 2.0 e VS 2005 Team System
- VS 2005 e SQL Server 2005 Express da scaricare
- Microsoft aggiorna WinFS beta 1 per VS 2005
- Utilizzare CLEditor per consentire l'input di HTML in ASP.NET MVC