zoukankan      html  css  js  c++  java
  • 文件夹复制操作(非递归循环遍历文件夹)

    /// <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;
                }
            }
    版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
    个人微信公众号
    创业QQ群:617713515
    Donation(扫码支持作者):支付宝:
    Donation(扫码支持作者):微信:
  • 相关阅读:
    关于我成为电脑维修社团一员那些事
    [算法相关]二进制分组
    [题解]陌上花开
    [题解]UVA10917 Walk Through the Forest
    [字符串相关]后缀自动机(SAM)- 一
    [字符串相关]后缀数组
    [字符串相关]Aho-Corasick 自动机
    [算法入门]线性基
    [数据结构]可持久化并查集
    [数据结构]可持久化线段树
  • 原文地址:https://www.cnblogs.com/cyq1162/p/762294.html
Copyright © 2011-2022 走看看