Well thats make feel better and might be doing something right but here is the main grunt work
private Dictionary<FileSystemInfo, SystemException> CopyFiles(DirectoryInfo sourceDirectory, DirectoryInfo destinationDirectory, ICollection<string> extensionFilters, bool copySubDirectories)
{
var exceptions = new Dictionary<FileSystemInfo, SystemException>();
return CopyFiles(sourceDirectory, destinationDirectory, extensionFilters, copySubDirectories, exceptions);
}
private Dictionary<FileSystemInfo, SystemException> CopyFiles(DirectoryInfo sourceDirectory, DirectoryInfo destinationDirectory, ICollection<string> extensionFilters, bool copySubDirectories, Dictionary<FileSystemInfo, SystemException> exceptions)
{
if (!destinationDirectory.Exists)
{
try
{
destinationDirectory.Create();
}
catch (IOException ex)
{
exceptions.Add(destinationDirectory, ex);
}
catch (SecurityException se)
{
exceptions.Add(destinationDirectory, se);
}
}
//var poop = sourceDirectory.EnumerateFiles().Where(fi => filters.Contains(fi.Extension));
foreach (var fi in sourceDirectory.GetFilteredFiles(extensionFilters))
{
FileInfo newFile = new FileInfo(Path.Combine(destinationDirectory.FullName, fi.Name));
if (!newFile.Exists)
{
try
{
fi.CopyTo(newFile.FullName);
}
catch (IOException ex)
{
exceptions.Add(newFile, ex);
}
catch (SecurityException se)
{
exceptions.Add(newFile, se);
}
}
else if (fi.LastWriteTimeUtc > newFile.LastWriteTimeUtc)
{
try
{
fi.CopyTo(newFile.FullName, true);
}
catch (IOException ex)
{
exceptions.Add(newFile, ex);
}
catch (SecurityException se)
{
exceptions.Add(newFile, se);
}
}
}
if (copySubDirectories)
{
foreach (var subDi in sourceDirectory.EnumerateDirectories())
{
var tempDI = new DirectoryInfo(Path.Combine(destinationDirectory.FullName, subDi.Name));
CopyFiles(subDi, tempDI, extensionFilters, true, exceptions);
}
}
return exceptions;
}
private DirectoryInfo ExpandDirectoryPath(string unExpandedPath)
{
return new DirectoryInfo(Environment.ExpandEnvironmentVariables(unExpandedPath));
}
internal static IEnumerable<FileInfo> GetFilteredFiles(this DirectoryInfo sourceDirectory,
ICollection<string> extensions)
{
if (extensions.Count == 0)
{
return sourceDirectory.EnumerateFiles();
}
return sourceDirectory.EnumerateFiles().Where(fi => extensions.Contains(fi.Extension));
}
exceps = CopyFiles(updateDirectory, NetLoaderDirectoryPath, extensionFilters, copySubs);
foreach (var loadFile in xDataDoc.Descendants("LoadFile"))
{
var assemblyFI = GetFilePathFromAddinLoaderDirectory(loadFile.Value);
Assembly.LoadFrom(assemblyFI.FullName);
}
You can also find your answers @
TheSwamp