Как разделить путь к набору пути

#c# #.net #arrays #string

#c# #.net #массивы #строка

Вопрос:

У меня есть одна переменная пути, например ‘Customer \ Calls \ A1 \ A2 \ A3 \ A4’.Исходя из этого, я хочу разделить его на массив, например

 'Customer'
'CustomerCalls'
'CustomerCallsA1'
'CustomerCallsA1A2'
'CustomerCallsA1A2A3'
'CustomerCallsA1A2A3A4'
  

Если мы сделаем это так

  string[] directories = currentFolderPath.Split(Path.DirectorySeparatorChar);
  

мы получим набор папок, но он не попадет в вышеуказанную структуру

Кто-нибудь может предложить лучший подход

Комментарии:

1. Покажите свои усилия? В чем проблема?

Ответ №1:

Получайте родительский каталог, пока не дойдете до корня

если это абсолютный путь

 private static IEnumerable<string> SplitPath(string path){
    do{
        yield return path;
        path=Path.GetDirectoryName(path);
    } while(path!=null);
}
  

если это относительный путь

 private static IEnumerable<string> SplitRelativePath(string path){
    do{
        yield return path;
        var lastIndex=path.LastIndexOf('\');
        if(lastIndex==-1)
            yield break;
        path=path.Substring(0, lastIndex);
    } while(path!=null);
}

//usage
SplitRelativePath(@"CustomerCallsA1A2A3A4");


/* result:
C:CustomerCallsA1A2A3A4 
C:CustomerCallsA1A2A3 
C:CustomerCallsA1A2 
C:CustomerCallsA1 
C:CustomerCalls 
C:Customer 
C: *
  

Комментарии:

1. мой путь будет похож на Customer \ Calls \ A1 \ A2 \ A3 \ A4 .. Так что в этом случае он завершится неудачей

Ответ №2:

 string path = @"CustomerCallsA1A2A3A4";
var sections = path.Split('\').ToList();
var result = Enumerable.Range(0, sections.Count)
                       .Select(index => string.Join(@"", sections.Take(index   1)))
                       .ToList();

//Result:
// Customer
// CustomerCalls
// CustomerCallsA1
// CustomerCallsA1A2
// CustomerCallsA1A2A3
// CustomerCallsA1A2A3A4
  

Ответ №3:

Это не совсем очевидно из вашего сообщения, но если вам нужно что-то сделать с каждым элементом в вашем массиве, я бы, вероятно, воспользовался этим подходом:

 string path = string.Empty;
"Customer\Calls\A1\A2\A3\A4".Split(new Char[] { '\' }).ToList().ForEach(
        part => {
            path = Path.Combine(path, part);
            // Do stuff!
        }
);
  

Ответ №4:

             // easy and simple try this
            string path = @"CustomerCallsA1A2A3A4";
            string[] pathArr =  path.Split('\');
            List<string> list = new List<string>();
            for (int i = 0; i < pathArr.Length; i  )
            {
                string temp = pathArr[i];
                if (i > 0)
                {
                    temp = list[i - 1].ToString()   @""   temp;
                }
                list.Add(temp);

            }
  

Ответ №5:

         string path = "Customer\Calls\A1\A2\A3\A4";
        var pathArr = path.Split(new string[] { "\" }, StringSplitOptions.None);
        var pathList = new List<string>();
        while (pathArr.Length != pathList.Count)
        {
            string modifiedPath = "";
            for (int i = 0; i < pathArr.Length; i  )
            {
                modifiedPath = modifiedPath   pathArr[i]   "\";
                if (i == pathList.Count)
                {

                    pathList.Add(modifiedPath);
                    break;
                }
            }
        }

        foreach (var str in pathList)
        {
            Console.WriteLine(str.Remove(str.Length - 1));

        }
        Console.ReadKey();