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

简介:

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

相关文章
|
6月前
|
弹性计算 运维 Shell
遍历当前目录文件并执行检查
【4月更文挑战第30天】
43 0
递归遍历目录下面指定的文件名
递归遍历目录下面指定的文件名
C#编程-112:文件夹操作之判断是否存在
C#编程-112:文件夹操作之判断是否存在
102 0
C#编程-112:文件夹操作之判断是否存在
|
前端开发 开发工具 计算机视觉
30行代码实现合并指定目录下的所有文件的内容
30行代码实现合并指定目录下的所有文件的内容
|
Python
ctfhub——目录遍历python脚本解法
ctfhub——目录遍历python脚本解法
553 0
ctfhub——目录遍历python脚本解法
C#编程-29:循环访问目录树
C#编程-29:循环访问目录树
C#编程-18:遍历某一路径下所有文件和文件夹
C#编程-18:遍历某一路径下所有文件和文件夹
515 0
|
Python
【面试题】实现文件夹中文件的遍历输出
【面试题】实现文件夹中文件的遍历输出
【面试题】实现文件夹中文件的遍历输出
递归删除指定文件-目录
递归删除指定文件-目录
123 0