Le classi StorageFile e StorageFolder contenute nel namespace Windows.Storage sfortunatamente non mettono a disposizione dei metodi che permettono la creazione di directory o di file all'interno di directory tramite un path relativo.
Con lo script seguente vediamo di colmare questa lacuna:
public static class DirectoryStructureHelper { public static async Task<StorageFolder> CreateFolderFromPath(String[] folders, StorageFolder root) { for (int i = 0; i < folders.Length - 1; i++) { await root.CreateFolderAsync(folders<i>,CreationCollisionOption.OpenIfExists); root = root.Name != folders<i> ? await root.GetFolderAsync(folders<i>) : root; } return root; } public static async Task<StorageFile> CreateFileInPath(String path, String fileName, StorageFolder root) { StorageFolder last = await CreateFolderFromPath(path.Split('/'), root); return await last.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting); } }
La classe in questione si compone di due metodi: uno dedicato alla creazione delle cartelle e uno dedicato alla creazione dei file.
Per quanto riguarda la creazione di cartelle non facciamo altro che prendere un array di stringhe che, come possiamo vedere dal metodo relativo alla creazione dei file, non è altro che il nostro path relativo dopo un operazione di splitting.
Una volta identificata la lunghezza del path, tramite un ciclo for andiamo a creare in maniera consecutiva le varie directory, avendo un occhio di riguardo su possibili CreationCollisionOptions una volta terminato il ciclo for restituiamo l?ultima directory creata.
A questo punto la creazione dei file diventa operazione banale poiché sfruttiamo il lavoro fatto dal metodo di creazione delle cartelle e non appena esso termina utilizziamo la StorageFolder restituita per creare un file al suo interno.
IMPORTANTE: E' importante ricordare che il sistema ha una dimensione di path massima definita come costante del sistema operativo, qualora dovessimo superarla, ovvero creiamo un path che ha un numero di caratteri maggiore di 255, il sistema solleverà un eccezione del tipo PathTooLongException non appena tenteremo di accedere a tale directory.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Le novità di Angular: i miglioramenti alla CLI
Utilizzare la session affinity con Azure Container Apps
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Gestire domini wildcard in Azure Container Apps
Utilizzare i primary constructor in C#
Effettuare il binding di date in Blazor
Gestire undefined e partial nelle reactive forms di Angular
Reactive form tipizzati con modellazione del FormBuilder in Angular
Migrare una service connection a workload identity federation in Azure DevOps
Limitare le richieste lato server con l'interactive routing di Blazor 8
Reactive form tipizzati con FormBuilder in Angular
I più letti di oggi
- Vuoi incontrare Bill Gates? Viaggia con ASPItalia.com!
- Customizzare il pager del DataGrid
- Stabilire un collegamento VPN tra una Web App e una Virtual Network
- Documentare ASP.NET Web API con Swagger
- Usare i servizi REST di BING per ottenere informazioni sulla posizione dell'utente
- Visual Studio 2005 CTP May