All'interno della Base Class Library del Framework .NET non è presente un metodo che ci permette di copiare una folder con tutto il suo contenuto, se non all'interno dell'assembly Microsoft.VisualBasic (per chi fosse interessato Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory).
La motivazione della mancata integrazione di questa funzione è già stata data dal Team della BCL a questo indirizzo http://blogs.msdn.com/bclteam/archive/2004/01/19/60377.aspx
Non è una cosa brutta sfruttare l'assembly Microsoft.VisualBasic dalla nostra applicazione per invocare il method in questione, ma neanche elegantissima, specie se ci non ci serve altro da quell'assembly.
Lo snippet seguente non è altro che una funzione ricorsiva che si occupa di ricreare la stessa struttura di cartelle da un path all'altro e copiarci all'interno i files con l'utilizzo di Directory.Create e File.Copy.
public static void Copy(this DirectoryInfo source, string destDirectory, bool recursive) { if (source == null) throw new ArgumentNullException("source"); if (string.IsNullOrEmpty(destDirectory)) throw new ArgumentNullException("destDirectory"); if (!source.Exists) throw new DirectoryNotFoundException("Source directory not found: " + source.FullName); if (!Directory.Exists(destDirectory)) Directory.CreateDirectory(destDirectory); var files = source.GetFiles(); //Copio tutti i file della cartella for (var i = 0; i < files.Length; i++) files<i>.CopyTo(Path.Combine(destDirectory, files<i>.Name), true); if (!recursive) return; var directories = source.GetDirectories(); //Se ricorsiva ricreo la struttura for (var i = 0; i < directories.Length; i++) Copy(directories<i>, Path.Combine(destDirectory, directories<i>.Name), recursive); }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Gli oggetti CallOut di Expression Blend 4.0
- Configurazione tramite environment variable in ASP.NET Core
- Controllare gli accessi IP alle app con Azure Container Apps
- Creare applicazioni web native con Electron
- Utilizzare le sequence di SQL Server in Entity Framework Core
- Update NoDo di marzo 2011 di Windows Phone in fase di distribuzione
- Tile, notifiche e background task in Windows Phone 8
- Mantenere l'ordine dei dati in una query PLINQ