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

  • 相关阅读:
    Python中webbrowser的用法
    python爬虫笔记
    PHP yii2.0框架利用mpdf导出pdf
    PyQt5中QTableWidget设置列宽大小的几种方式
    看linux正在运行的服务用哪个命令?
    查看SELinux状态
    查看SMB服务器用户
    centOS7 下安装smb服务器
    (samba启动失败)smb.service: main process exited, code=exited, status=1/FAILURE
    Linux 操作日志
  • 原文地址:https://www.cnblogs.com/zhang-15-506/p/7978080.html
Copyright © 2011-2022 走看看