如何使用一个或多个通配符扩展复杂路径

时间:2019-06-13 03:09:40

标签: c# filesystems wildcard

我试图用C#编写一个命令行实用程序,该实用程序有点类似于Linux的“ du”命令。理想情况下,此实用程序将通过一个或多个路径作为参数。

假设目录c:\ project有名为0000到9999的子目录,并且每个目录都有子目录,例如测量,工程,地下,建筑。

例如:    utlity.exe f:\ 5 * f:\ 6 * \ 01 5?780 \ 48 *

更新---

这是我要编写的用于扩展路径的函数示例:

public static string[] ExpandFilePaths(string[] @args)
    {
        var dirList = new List<string>();
        string[] myPath;
        foreach (string path in args)
        {
            int lastSlashPosition;
            int firstWildcardPosition = -1;
            int firstSplatPosition = path.IndexOf("*");
            int firstQuestionPosition = path.IndexOf("?");

            // Do we have a wildcard?
            if (firstSplatPosition > -1 && firstQuestionPosition > -1)
            {
                if (firstSplatPosition < firstQuestionPosition)
                {
                    firstWildcardPosition = firstSplatPosition;
                }
                else
                {
                    firstWildcardPosition = firstQuestionPosition;

                }
                string prewildcard = path.Substring(0, firstWildcardPosition);
                lastSlashPosition = prewildcard.LastIndexOf("\\");
            }
            else if (firstSplatPosition > -1 && firstQuestionPosition == -1)
            {
                firstWildcardPosition = firstSplatPosition;
                string prewildcard = path.Substring(0, firstWildcardPosition);
                lastSlashPosition = prewildcard.LastIndexOf("\\");
            }
            else if (firstSplatPosition == -1 && firstQuestionPosition > -1)
            {
                firstWildcardPosition = firstQuestionPosition;
                string prewildcard = path.Substring(0, firstWildcardPosition);
                lastSlashPosition = prewildcard.LastIndexOf("\\");
            }
            else
            {
                lastSlashPosition = path.LastIndexOf("\\");
            }


            if (lastSlashPosition == -1)
            {
                myPath = Directory.GetDirectories(".\\", path);
            }
            else
            {
                string pathPart = path.Substring(0, lastSlashPosition + 1);
                string dirPart = path.Substring(lastSlashPosition + 1);
                myPath = Directory.GetDirectories(pathPart, dirPart);
            }

            foreach (string item in myPath)
            {
                dirList.Add(item);
            }
        }
        return dirList.ToArray();
    }
}

当路径具有多个通配符(例如f:\ 8 * \ 01 *)时,我一直遇到Directory.GetDirectories()的问题。

我感觉就像是一只松鼠在树上奔跑,以为必须有更好的方法?

任何帮助将不胜感激。这不是学校的作业,而是我将在工作中用来自学C#的工具。

0 个答案:

没有答案