Как расширить сложные пути с одним или несколькими подстановочными знаками - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь написать утилиту командной строки на C #, похожую на команду Linux du. Эта утилита в идеале должна передавать один или несколько путей в качестве аргументов.

Предполагается, что в каталоге c: \ project есть подкаталоги с именами от 0000 до 9999, а у каждого из этих каталогов есть дочерние каталоги, такие как геодезические, инженерные, подземные, архитектурные.

Ex: 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();
    }
}

Я продолжаю сталкиваться с проблемами с Directory.GetDirectories (), когда путь содержит несколько подстановочных знаков, например f: \ 8 * \ 01 *.

Я чувствую себя подобно белке, бегающей вокруг дерева, думая, что должен быть лучший путь?

Любая помощь будет оценена. Это не школьное задание, а скорее инструмент, который я буду использовать на работе, который я использую, чтобы научить себя C #.

...