ファイルc:\ a1 \ b2 \ c3 \ foo.txtをd:\ a1 \ b2 \ c3 \ foo.txtにコピーします。サブディレクトリはDドライブには存在しません。直接CopyTo()を実行しようとするとIO例外が発生します。 不足しているディレクトリを作成するという汚い作業を行う組み込みのC#関数を見つけることができませんでした。かなり関わっだことまだ存在しないディレクトリへのCopyTo()
FileInfo file = new FileInfo(@"c:\a1\b2\c3\foo.txt");
DirectoryInfo destDir = new DirectoryInfo(file.DirectoryName.Replace("c:", "d:");
if (!destDir.Exists) // false
CreateDirectory(destDir, null);
file.CopyTo(file.FullName.Replace("c:", "d:"), true);
private void CreateDirectory(DirectoryInfo endDir, Stack<DirectoryInfo> trail)
{
if (trail == null)
{
trail = new Stack<DirectoryInfo>();
trail.Push(endDir);
}
// remove last directory - c:\a1\b2\c3, c:\a1\b2, c:\a1
Match theMatch = Regex.Match(endDir.FullName, @".*(?=\\\w*\Z)");
DirectoryInfo checkDir = new DirectoryInfo(theMatch.ToString());
if (!checkDir.Exists)
{
trail.Push(checkDir);
CreateDirectory(checkDir, trail);
}
else
foreach (DirectoryInfo dir in trail)
Directory.CreateDirectory(dir.FullName);
}
、と彼らは深夜informercialsに言って好きなように、「もっと良い方法があるように持っている!」:だから私はこれを書きました
質問:上記の機能を効率的にするにはどうすればよいですか?そして、私は既に私が難しいやり方をしているすべてのことをしている組み込みメソッドが欠けていますか?
私はそれがあまりにも関与していることを意味していると思います。ありがとう!それは私が恐れていたものです:) – Drakestar