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

  • 相关阅读:
    jboss hello world
    jboss 7 启动问题
    jboss [how to access the admin console]
    tomee 消息持久化
    Python、C和Java对比
    编程语言产生时间表
    从关系型数据库到非关系型数据库
    约束和异常处理
    类与类之间的关系
    类的成员
  • 原文地址:https://www.cnblogs.com/zhang-15-506/p/7978080.html
Copyright © 2011-2022 走看看