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
- Creare un adorner personalizzato per le trading cards di PivotViewer in Silverlight 5.0
- Copiare uno Stream con il .NET Framework 4.0
- Supporto alla validazione client-side in una data annotation su ASP.NET MVC 3
- Disabilitare automaticamente un workflow di GitHub (parte 2)
- Dependency injection con Minimal API di ASP.NET Core
- Migliorare l'organizzazione delle risorse con Azure Policy
- Sfruttare una CDN con i bundle di ASP.NET
- Creare applicazioni in real-time con ASP.NET SignalR
- Memorizzare posizione e dimensioni della finestra di una applicazione OOB Silverlight 4.0
- Web Camp - HTML5 per il web di oggi