コード例 #1
0
ファイル: Floder.cs プロジェクト: AHappyFun/VirtualDisk
        public Node GetChildByName(string name, bool isMatch = false)
        {
            //1.先对特殊名进行字符进行转换
            string tmp = string.Empty;

            if (name == ".")  //文件name不能是. / \ 这种
            {
                //name转换成当前结点
                return(disk.current);
            }
            else if (name == "..")
            {
                //name转换成上一节点
                Node f = this.parent;
                if (f != null)
                {
                    return(f);
                }
                else
                {
                    return(this);
                }
            }
            else
            {
                //如果是中间有空格的
                if (name.Contains("\""))
                {
                    name = name.Trim(new char[] { '"' }).Replace('_', ' ');
                }
                //通配符
                if (isMatch && name.Contains("*") || name.Contains("?"))
                {
                    var           rex   = CmdStrTool.WildCardToRegex(name);
                    List <string> names = new List <string>();
                    foreach (Node item in childs)
                    {
                        names.Add(item.name);
                    }
                    List <string> list = names.Where(ex => Regex.IsMatch(ex, rex, RegexOptions.IgnoreCase)).ToList();
                    if (list.Count > 0)
                    {
                        name = list[0];
                    }
                }
            }

            //2.find node
            foreach (Node node in childs)
            {
                if (node.name == name)
                {
                    return(node);
                }
            }
            return(null);
        }