递归复制文件
我发现了一个用于在 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);
}
}
问题是,在第二个范围中,我要么:
- 使用 Path.GetFileName(file) 获取不带路径的实际文件名,但我丢失了目录“mc”目录结构或< /strong>
- 使用“文件”而不使用 Path.Combine。
无论哪种方式,我都必须做一些令人讨厌的字符串工作。在 C# 中是否有一个好的方法来做到这一点(我对 .NET API 缺乏了解导致我把事情变得过于复杂)
I found a small snippet for doing a recursive file copy in C#, but am somewhat stumped. I basically need to copy a directory structure to another location, along the lines of this...
Source: C:\data\servers\mc
Target: E:\mc
The code for my copy function as of right now is...
//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);
}
}
The issue is that in the second scope, I either:
- use
Path.GetFileName(file)
to get the actual file name without the path but I lose the directory "mc" directory structure or - use "file" without Path.Combine.
Either way I have to do some nasty string work. Is there a good way to do this in C# (my lack of knowledge with the .NET API leads me to over complicating things)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
MSDN 有一个完整的示例:如何:复制目录
MSDN has a complete sample: How to: copy directories
此答案的非递归替换是:
A non-recursive replacement for this answer would be:
而不是
做这样的事情
instead of
do something like this