C#——复制文件夹

    之前在做更新备份功能的时候,错误地将复制文件夹的功能采用Directory.Move函数来实现,造成了不大不小的麻烦。本来是想备份整个文件夹,但是最后却将源文件夹里的内容给移走了。C#的库函数只提供了Directory.Move函数和File.Copy函数,没有现成的复制文件夹函数。要想实现复制文件夹的功能,只能自己手动实现。对于文件夹的操作,其实最终还是在于单个文件的操作。在正确的路径上创建对应的文件夹,然后将文件复制到正确的文件夹里。整体的思路是:在目标文件夹先创建一个与源文件夹相同名称的文件夹,然后获取源文件夹下所有的文件夹和文件。对于文件,直接移动到目标文件夹下对应的源文件夹相同名称的文件夹内;对于文件夹,首先在目标文件目标里创建一个相同名称的文件夹,然后扫描源文件夹内的内容。。。

。。。可以看到,这是一个递归的过程。递归的深度和文件夹的深度成正比,递归返回的条件是文件夹中不包含子文件夹只有文件或为空。用代码实现如下:

        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函数不允许跨分区移动,所以如果要实现跨分区移动,可以先将文件夹复制到目标文件夹,再将源文件夹删除。

原文地址:https://www.cnblogs.com/zhang-15-506/p/7978080.html