Dra*_*tar 2 c# directory recursion
我想将文件c:\ a1\b2\c3\foo.txt复制到d:\ a1\b2\c3\foo.txt.子驱动器在D驱动器上不存在,如果我尝试直接执行CopyTo(),我将获得IO异常.我无法找到任何内置的c#函数来完成创建缺少目录的脏工作.所以我写了这个:
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);
}
Run Code Online (Sandbox Code Playgroud)
这非常复杂,正如他们喜欢在深夜的商业广告中说的那样,"必须有更好的方法!"
问题:如何使上述功能移动高效?我是否错过了一个内置方法,已经完成了我正在做的所有事情?
Directory.CreateDirectory(@"c:\foo\bar\baz");
Run Code Online (Sandbox Code Playgroud)
记录为创建所有必需的目录,并为我工作.
创建路径中指定的任何和所有目录,除非它们已存在或除非路径的某些部分无效.path参数指定目录路径,而不是文件路径.如果该目录已存在,则此方法不执行任何操作.
| 归档时间: |
|
| 查看次数: |
5218 次 |
| 最近记录: |