Un'extension method per copiare una cartella

di Ugo Lattanzi, in .NET Framework,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

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