为了账号安全,请及时绑定邮箱和手机立即绑定

文件夹复制操作(非递归循环遍历文件夹)

标签:
资讯

/// <summary>
        /// 创建文件夹
        /// </summary>
        /// <param name="SourcePath">原始路径</param>
        /// <returns></returns>
        public static bool CreateFolder(string SourcePath)
        {
            try
            {
                Directory.CreateDirectory(SourcePath);
                return true;
            }
            catch
            {
                return false;
            }
        }

 /// <summary>
        /// 复制文件夹[循环遍历]
        /// </summary>
        /// <param name="SourcePath">原始路径</param>
        /// <param name="DestinPath">目地的路径</param>
        /// <returns></returns>
        public static bool  CopyFolder(string SourcePath, string DestinPath)
        {
            if (Directory.Exists(SourcePath))
            {
                CreateFolder(DestinPath);//第一次创建跟目录文件夹
                string sourcePath = SourcePath;//[变化的]原始路径
                string destinPath = DestinPath;//[变化的]目地的路径
                Queue<string> source = new Queue<string>();//存原始文件夹路径
                Queue<string> destin = new Queue<string>();//存目地的文件夹路径
                bool IsHasChildFolder = true;//是否有子文件夹
                string tempDestinPath = string.Empty;//临时目地的,将被存于destin中
                while (IsHasChildFolder)
                {
                    string[] fileList = Directory.GetFileSystemEntries(sourcePath);// 得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组
                    for (int i = 0; i < fileList.Length; i++)// 遍历所有的文件和目录
                    {
                        tempDestinPath = destinPath + "\\" + Path.GetFileName(fileList[i]);//取得子文件路径
                        if (Directory.Exists(fileList[i]))//存在文件夹时
                        {
                            source.Enqueue(fileList[i]);//当前的子目录的原始路径进队列
                            destin.Enqueue(tempDestinPath);//当前的子目录的目地的路径进队列
                            CreateFolder(tempDestinPath);//创建子文件夹
                        }
                        else//存在文件
                        {
                            File.Copy(fileList[i], tempDestinPath, true);//复制文件
                        }
                    }
                    if (source.Count > 0 && source.Count == destin.Count)//存在子文件夹时
                    {
                        sourcePath = source.Dequeue();
                        destinPath = destin.Dequeue();
                    }
                    else
                    {
                        IsHasChildFolder = false;
                    }
                }
                return true;
            }
            else
            {
                return false;
            }
        }

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
移动开发工程师
手记
粉丝
18
获赞与收藏
134

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消