#97 - Un'extension method per copiare una cartella
di Ugo Lattanzi, in .NET Framework, 6 febbraio 2009
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); }
Approfondimenti
-
12 aprile 2010: ecco la data ufficiale di lancio di VS 2010 e .NET Framework 4.0
-
#132 - Utilizzare una funzione come corpo di una lambda in LINQ to Objects
-
#149 - Personalizzare le istanze di un servizio WCF
-
#133 - Una collezione avanzata per il data binding di WPF
-
#119 - Creare servizi WCF per applicazioni Silverlight
-
Visto che ultimamente Reflection.Emit è di moda...
-
Mostrare la WebCam in Silverlight
-
MetadataDiffViewer: differenze tra i framework
-
Utilizzare Entity SQL per eseguire query in Entity Framework
-
Architettura Model-View-ViewModel in un?applicazione WPF
-
Entity Framework in action è in disponibile in MEAP
-
WPF e Siverlight: Dispatcher e finestre modali

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.