以前在作更新备份功能的时候,错误地将复制文件夹的功能采用Directory.Move函数来实现,形成了不大不小的麻烦。原本是想备份整个文件夹,可是最后却将源文件夹里的内容给移走了。C#的库函数只提供了Directory.Move函数和File.Copy函数,没有现成的复制文件夹函数。要想实现复制文件夹的功能,只能本身手动实现。对于文件夹的操做,其实最终仍是在于单个文件的操做。在正确的路径上建立对应的文件夹,而后将文件复制到正确的文件夹里。总体的思路是:在目标文件夹先建立一个与源文件夹相同名称的文件夹,而后获取源文件夹下全部的文件夹和文件。对于文件,直接移动到目标文件夹下对应的源文件夹相同名称的文件夹内;对于文件夹,首先在目标文件目标里建立一个相同名称的文件夹,而后扫描源文件夹内的内容。。。函数
。。。能够看到,这是一个递归的过程。递归的深度和文件夹的深度成正比,递归返回的条件是文件夹中不包含子文件夹只有文件或为空。用代码实现以下:spa
private void CopyDirectory(string sourcePath, string destPath) { string floderName = Path.GetFileName(sourcePath); DirectoryInfo di = Directory.CreateDirectory(Path.Combine(destPath, floderName)); string[] files = Directory.GetFileSystemEntries(sourcePath); foreach (string file in files) { if (Directory.Exists(file)) { CopyDirectory(file, di.FullName); } else { File.Copy(file, Path.Combine(di.FullName, Path.GetFileName(file)),true); } } }
这里要注意File.Copy的用法。另外,这个函数能够实现跨磁盘分区的复制。C#自带的Directory.Move函数不容许跨分区移动,因此若是要实现跨分区移动,能够先将文件夹复制到目标文件夹,再将源文件夹删除。code