This post originated from an RSS feed registered with .NET Buzz
by -.
Original Post: .NET: Directory.Move und unterschiedliche Volumes
Feed Title: Norbert Eder - Living .NET
Feed URL: http://feeds.feedburner.com/NorbertEder-Livingnet
Feed Description: Copyright (c)2005, 2006 by Norbert Eder
Mit Directory.Move ist es sehr einfach, komplette Verzeichnisse zu verschieben. Ein Problem stellt sich lediglich dann ein, wenn Verzeichnisse zwischen unterschiedlichen Volumes verschoben werden sollen. Dies wird durch Directory.Move nicht abgedeckt. Stattdessen muss auf eine eigene Implementierung zurück gegriffen werden.
Mit Hilfe einer Rekursion kann das dann in etwa so aussehen:
publicvoid MoveDirectory(
string strSourceDir,
string strDestDir,
bool bDelSource)
{
if (Directory.Exists(strSourceDir))
{
if (Directory.GetDirectoryRoot(strSourceDir) ==
Directory.GetDirectoryRoot(strDestDir))
{
Directory.Move(strSourceDir, strDestDir);
}
else
{
try
{
CopyDirectory(new DirectoryInfo(strSourceDir),
new DirectoryInfo(strDestDir));
if (bDelSource)
Directory.Delete(strSourceDir, true);
}
catch (Exception subEx)
{
throw subEx;
}
}
}
}
privatevoid CopyDirectory(
DirectoryInfo diSourceDir,
DirectoryInfo diDestDir)
{
if (!diDestDir.Exists)
diDestDir.Create();
FileInfo[] fiSrcFiles = diSourceDir.GetFiles();
foreach (FileInfo fiSrcFile in fiSrcFiles)
fiSrcFile.CopyTo(Path.Combine(diDestDir.FullName, fiSrcFile.Name));
DirectoryInfo[] diSrcDirectories = diSourceDir.GetDirectories();
foreach (DirectoryInfo diSrcDirectory in diSrcDirectories)
CopyDirectory(
diSrcDirectory,
new DirectoryInfo(
Path.Combine(diDestDir.FullName, diSrcDirectory.Name)));
}
Was ich an Directory.Move allerdings nicht ganz verstehe ist, dass eben Verzeichnisse nicht auf unterschiedliche Volumes verschoben werden können. File.Move kann dies, warum also Directory.Move nicht. Wenn also jemand einen Ansatz hat, warum das so sein könnte, bitte melden, würde mich wirklich interessieren.