搜索当前目录的子目录或者上级目录下的子目录中特定的目录

常用的.NET代码

 首先,搜索当前目录下的子目录,如果没有,逐层搜索上级目录下面的所有子目录,有没有特定的目录。为了防止其它子目录可能跟目标目录重名,还可以同时指定目标目录下特定的一级子目录或者文件。这也是一个“深度优先搜索”的例子。下面是完整的代码:

 

/// <summary>

    /// 搜索特定的目录

    /// </summary>

    public class SearchSpecFolder

    {

        /// <summary>

        /// 当前搜索总次数

        /// </summary>

        public int SerachCount { get; private set; }

 

        /// <summary>

        /// 搜索指定的目录名称,先从当前目录的子目录进行搜索,如果没有搜索到,从当前目录的父目录开始搜索

        /// </summary>

        /// <param name="baseDir">搜索开始的目录</param>

        /// <param name="targetName">目标目录名称</param>

        /// <param name="matchChildDir">可选需要继续匹配的目标目录下的子目录</param>

        /// <param name="matchChildFile">可需要继续选匹配的目标目录下的文件</param>

        /// <returns>如果没有搜索到,返回空字符串</returns>

        public string SearchSpectionFolderWithParent(string baseDir, string targetName, string matchChildDir=null, string matchChildFile=null)

        {

            Console.WriteLine("--Search Parent:{0}", baseDir);

            string obj = SearchSpectionChildFolder(baseDir, targetName, matchChildDir, matchChildFile);

            if (obj == "")

            {

                //如果子目录没有搜索到,搜索上级目录

                var parentDir = System.IO.Directory.GetParent(baseDir);

                if (parentDir == null)

                    return "";

                return SearchSpectionFolderWithParent(parentDir.FullName, targetName, matchChildDir, matchChildFile);

            }

            return obj;

        }

 

        /// <summary>

        /// 从子目录搜索包含指定目录名称的目录,可以选择用一个子目录或者目录下面的一个文件来匹配当前是正确的目标目录(因为在其它目录下可能有重名的当前目录名称)

        /// </summary>

        /// <param name="baseFolder">当前目录</param>

        /// <param name="targetName">指定的目录名称</param>

        /// <param name="matchChildDir">可选需要继续匹配的目标目录下的子目录</param>

        /// <param name="matchChildFile">可需要继续选匹配的目标目录下的文件</param>

        /// <returns>匹配的目录名称</returns>

        private string SearchSpectionChildFolder(string baseFolder, string targetName, string matchChildDir, string matchChildFile)

        {

            SerachCount++;

            if (baseFolder == "")

                return "";

            //搜索当前子目录

            var allDir = System.IO.Directory.GetDirectories(baseFolder);

            foreach (var dir in allDir)

            {

                Console.WriteLine(dir);

                if (dir.EndsWith(targetName, StringComparison.OrdinalIgnoreCase))

                {

                    //匹配到目标目录,还需要匹配它的子目录名称或者包含的一个文件名称

                    if (!string.IsNullOrEmpty(matchChildDir))

                    {

                        string objPath = System.IO.Path.Combine(dir, matchChildDir);

                        if (System.IO.Directory.GetDirectories(dir).Contains(objPath))

                            return dir;

                    }

                    else if (!string.IsNullOrEmpty(matchChildFile))

                    {

                        string objPath = System.IO.Path.Combine(dir, matchChildFile);

                        if (System.IO.Directory.GetFiles(dir).Contains(matchChildFile))

                            return dir;

                    }

                    else

                    {

                        return dir;

                    }

                }

                //深度优先,搜索子目录

                string temp = SearchSpectionChildFolder(dir, targetName, matchChildDir, matchChildFile);

                if (temp != "")

                    return temp;

            }

            return "";//未找到,返回空

        }

    }

 

猜你喜欢

ASP.NET MVC 上传文件

2020-09-14

前端HTML:form action=/SiteManage/Upload method=post enctype=multipart/form-data上传网站压缩文件:input type=file name=file1 value= style=width:300px; class=myInput / input type=submit name=submit2 val

NET解压缩文件

2020-05-19

.NET 4.5之后,集成了文件解压缩功能,下面是使用方法:/// summary/// 解压缩文件到指定目录,将在指定目录下解压出一个压缩文件名字的最终的目录/// /summary/// param name=ZipPathZIP文件路径/param/// param na

使用XCopy备份指定日期之后的资料

2020-03-01

使用下面的命令:xcopy C:SourceDoc D:CopyedDoc /i /s /y /EXCLUDE:D:CopyedDocexcludeFile.txt /d:7-1-2010这将备份 SourceDoc 目录下面的 7月1日之后所有的文件和文件夹,exclued 文件包含了要排除的文件,比如:

SQL语句创建Access数据库表

2019-08-19

可以使用SqlServer的基本建表语句,但是有几点不同,首先,不能使用User这样的关键词,然后,在创建自增字段上与SqlServer不同。Access需要采用下面的方式:[User ID] autoincrement PRIMARY KEY不能使用下面的方式

为GridView添加索引列

2019-01-22

asp:TemplateField HeaderText=ID ItemTemplate%# Container.DataItemIndex +1 % /ItemTemplate /asp:TemplateField

X
返回
顶部