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);
}
}
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
)); }