继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

kala16
关注TA
已关注
手记 260
粉丝 18
获赞 134

/// <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;
            }
        }

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP