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

  • 相关阅读:
    自己设计的SSO登录流程图
    Java泛型:泛型类、泛型接口和泛型方法
    Java中泛型的各种使用
    Java总结篇系列:Java泛型
    java生成MD5校验码
    Android SQLite数据库之事务的学习
    Android SQLite详解
    android删除表和清空表
    Android 软键盘自动弹出和关闭
    java中表示二进制、八进制、十进制、十六进制
  • 原文地址:https://www.cnblogs.com/zhang-15-506/p/7978080.html
Copyright © 2011-2022 走看看