C#で再帰的なファイルコピーを実行するための小さなスニペットを見つけましたが、多少困惑しています。基本的に、この行に沿って、ディレクトリ構造を別の場所にコピーする必要があります...
ソース:C:\ data \ servers \ mc
ターゲット:E:\ mc
現在の私のコピー関数のコードは...
//Now Create all of the directories
foreach (string dirPath in Directory.GetDirectories(baseDir, "*", SearchOption.AllDirectories))
{
Directory.CreateDirectory(dirPath.Replace(baseDir, targetDir));
}
// Copy each file into it’s new directory.
foreach (string file in Directory.GetFiles(baseDir, "*.*", SearchOption.AllDirectories))
{
Console.WriteLine(@"Copying {0}\{1}", targetDir, Path.GetFileName(file));
if (!CopyFile(file, Path.Combine(targetDir, Path.GetFileName(file)), false))
{
int err = Marshal.GetLastWin32Error();
Console.WriteLine("[ERROR] CopyFile Failed on {0} with code {1}", file, err);
}
}
問題は、2番目のスコープでは、次のいずれかです。
- パスなしで実際のファイル名を取得するために使用
Path.GetFileName(file)
しますが、ディレクトリ「mc」ディレクトリ構造が失われます。 - Path.Combineなしで「ファイル」を使用します。
いずれにせよ、私はいくつかの厄介な文字列の仕事をしなければなりません。C#でこれを行うための良い方法はありますか(.NET APIに関する知識が不足していると、物事が複雑になりすぎます)