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
Utilizzare @property per animare nativamente un oggetto HTML tramite CSS
Referenziare un package NuGet in una file based app .NET
Caching risposte AI con Microsoft.Extensions.AI
Utilizzare AbortController per cancellare operazioni asincrone in JavaScript
Creare popup e menu nativi in HTML con la Popover API
Permettere a un LLM di invocare funzioni con Microsoft.Extensions.AI
Abilitare .NET 10 su Azure App Service e Azure Functions
Utilizzare le librerie native di .NET per decomprimere un file zip
Blazor e InputHidden in .NET 10
Migrare applicazioni legacy nel cloud con Azure App Service Managed Instance
Sfruttare le regular expression in SQL Server 2025: la funzione REGEXP_LIKE
Impostare automaticamente l'altezza del font tramite CSS
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Accedere a risorse e immagini in Windows Store app di Windows 8
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Permettere il Drag-and-drop solo su zone predefinite con Silverlight 2.0
- Consumare dati binari in realtime lato client con ASP.NET Core SignalR
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Personalizare l'icona e le funzionalità di un sito web per iOS e IE
- Caricamenti veloci da CDN e fallback locale con ASP.NET Core
- Utilizzare dati in formato XML in XAML
- Accedere a dati esposti con WebService con Silverlight 1.0


