Ultima oara cand a fost nevoie sa fac asa ceva a fost in timpul facultății. In seara asta aveam de lucru la un proiect ce se ocupa cu un deploy si supriza, aveam nevoie de acest mecanism. Speram ca .NET 4.0 sa fie plin de surprize, dar din pacate nu. Asa ca am inceput sa implementez de manuta si uite ce a iesit:
Dezamagirea mea a fost in momentul in care am vrut sa il pun ca extension method la System.IO.Directory. Nu se poate asa ceva din cauza ca System.IO.Directory este o clasa statica. Asa ca trebe sa ne multumim cu clase helpere sau sa adaugam aceasta metoda ca extensie la DirectoryInfo.
Atentie, codul nu functioneaza daca unul din path-uri este subpath pentru celalat path. In cazul meu validarea pentru acest caz se face in alt loc.
public static class DirectoryHelperM-am gandit si la o varianta LINQ, sa folosesc ForEach si expresii lambda, dar nu e la fel de rapid ca un foreach scris de mana. Un For ar fi si mai rapid, dar nu cred ca e cazul, prefer sa las codul sa fie cat mai usor de inteles. Avantajul la LINQ ar fi fost ca se poate scrie fara apeluri recursive( o sa revin maine si cu varianta aceasta).
{
///
/// Copy recursive a directory to a specific location.
///
/// Source directory.
/// Destination directory.
public static void Copy(string sourceDirecotry, string destionationDirectory)
{
if (!Directory.Exists(destionationDirectory))
{
Directory.CreateDirectory(destionationDirectory);
}
//Copy all files from the current directory.
foreach (string file in Directory.GetFiles(sourceDirecotry))
{
var fileName=Path.GetFileName(file);
File.Copy(Path.Combine(destionationDirectory,fileName), Path.Combine(destionationDirectory, fileName));
}
//Copy files from the subfolders.
foreach (string folder in Directory.GetDirectories(sourceDirecotry))
{
var directoryName = Path.GetFileName(folder);
Copy(Path.Combine(destionationDirectory,directoryName), Path.Combine(destionationDirectory, directoryName));
}
}
}
Dezamagirea mea a fost in momentul in care am vrut sa il pun ca extension method la System.IO.Directory. Nu se poate asa ceva din cauza ca System.IO.Directory este o clasa statica. Asa ca trebe sa ne multumim cu clase helpere sau sa adaugam aceasta metoda ca extensie la DirectoryInfo.
Atentie, codul nu functioneaza daca unul din path-uri este subpath pentru celalat path. In cazul meu validarea pentru acest caz se face in alt loc.
Comments
Post a Comment