2016-10-12 3 views
0

I wie ‚Kunde einen Pfad Variable \\ \\ A1 Anrufe \\ A2 \\ A3 \\ A4'.From das ich es in ein Array aufteilen wollen wieWie Pfad aufzuspalten von Pfad zu setzen

'Customer' 
'Customer\Calls' 
'Customer\Calls\A1' 
'Customer\Calls\A1\A2' 
'Customer\Calls\A1\A2\A3' 
'Customer\Calls\A1\A2\A3\A4' 

Wenn wir es tun, wie

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

werden wir eine Reihe von Ordner bekommen, aber es wird über Struktur nicht erhalten in

Kann jemand empfehlen, einen besseren Ansatz

+4

Zeigen Sie Ihre Bemühungen? Wo ist das Problem ? – mybirthname

Antwort

2

Erhalten Sie übergeordnetes Verzeichnis, bis Sie an die Wurzel erhalten

wenn es ein absoluter Pfad ist

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

wenn es ein relativer Pfad ist

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(@"Customer\Calls\A1\A2\A3\A4"); 


/* result: 
C:\Customer\Calls\A1\A2\A3\A4 
C:\Customer\Calls\A1\A2\A3 
C:\Customer\Calls\A1\A2 
C:\Customer\Calls\A1 
C:\Customer\Calls 
C:\Customer 
C:\ * 
+0

mein Weg wird wie Kunde sein \\ Anrufe \\ A1 \\ A2 \\ A3 \\ A4 ..So in diesem Fall wird es fehlschlagen – vmb

+0

@vmb aktualisiert die Antwort – Artiom

+0

@ Artom..Danke so viel für die schnelle Antwort ... Ich werde es als Antwort nach einer Testphase markieren – vmb

0

Es ist nicht wirklich klar, aus Ihrem Post, aber wenn Sie müssen Sie etwas mit jedem Element in Ihrem Array tun, würde ich wahrscheinlich diesen Ansatz nehmen:

2
string path = @"Customer\Calls\A1\A2\A3\A4"; 
var sections = path.Split('\\').ToList(); 
var result = Enumerable.Range(0, sections.Count) 
         .Select(index => string.Join(@"\", sections.Take(index + 1))) 
         .ToList(); 

//Result: 
// Customer 
// Customer\Calls 
// Customer\Calls\A1 
// Customer\Calls\A1\A2 
// Customer\Calls\A1\A2\A3 
// Customer\Calls\A1\A2\A3\A4 
0
  // easy and simple try this 
      string path = @"Customer\Calls\A1\A2\A3\A4"; 
      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); 

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