2017-02-15 1 views
-1

Nehmen wir an, ich habe eine ISample.cs Datei in diesem Pfad D:\TEST_SOURCE\CV\SOURCECODE\ARMY.Data\ProceduresALL\test1\abdc\ISample.csSplit der Filepath String Ordner weise

Wie kann ich die Dateipfade in der folgenden Art und Weise erhalten?

D:\TEST_SOURCE\CV 
D:\TEST_SOURCE\CV\SOURCECODE 
D:\TEST_SOURCE\CV\SOURCECODE\ARMY.Data 
D:\TEST_SOURCE\CV\SOURCECODE\ARMY.Data\ProceduresALL 
D:\TEST_SOURCE\CV\SOURCECODE\ARMY.Data\ProceduresALL\test1 
D:\TEST_SOURCE\CV\SOURCECODE\ARMY.Data\ProceduresALL\test1\abdc 
D:\TEST_SOURCE\CV\SOURCECODE\ARMY.Data\ProceduresALL\test1\abdc\ISample.cs 
+0

Was hast du probiert? Kannst du wenigstens den Code anzeigen, der alles andere tut, als den Pfad zu teilen? – Enigmativity

+0

'Split 'sie basierend auf" \ "und ignorieren Sie zuerst 2. –

Antwort

3

Wie wäre es so etwas wie:

path = @"D:\TEST_SOURCE\CV\SOURCECODE\ARMY.Data\ProceduresALL\test1\abdc\ISample.cs" 

Console.WriteLine(path); 

while (path != null) { 
    path = Path.GetDirectoryName(path); 
    Console.WriteLine(path); 
} 

Ausgang:

D:\TEST_SOURCE\CV\SOURCECODE\ARMY.Data\ProceduresALL\test1\abdc 
D:\TEST_SOURCE\CV\SOURCECODE\ARMY.Data\ProceduresALL\test1 
D:\TEST_SOURCE\CV\SOURCECODE\ARMY.Data\ProceduresALL 
D:\TEST_SOURCE\CV\SOURCECODE\ARMY.Data 
D:\TEST_SOURCE\CV\SOURCECODE 
D:\TEST_SOURCE\CV 
D:\TEST_SOURCE 
D:\ 

Rextester Link

0

Sie können so etwas wie dies versuchen:

List<string> filePaths = new List<string>(); // be the list to store the List 
string basePath = @"D:\TEST_SOURCE\CV\SOURCECODE\ARMY.Data\ProceduresALL\test1\abdc\ISample.cs"; 
filePaths.Add(basePath); 

DirectoryInfo parentInfo = Directory.GetParent(basePath); 
while (parentInfo.Parent != null) 
{ 
    filePaths.Add(parentInfo.FullName); 
    parentInfo = Directory.GetParent(parentInfo.FullName); 
} 

Console.WriteLine(String.Join("\n",filePaths.OrderBy(x=>x.Length))); 
0

Sie können String.Split verwenden, um den Pfad zu teilen. Dann mit IEnumerable.Take und Split.Join Sie können es mit der gewünschten Tiefe verschmelzen zurück:

var path = @"D:\TEST_SOURCE\CV\SOURCECODE\ARMY.Data\ProceduresALL\test1\abdc\ISample.cs"; 
var pathParts = path.Split('\\');  
var pathUpToCv = string.Join("\\", pathParts.Take(3)); //"D:\TEST_SOURCE\CV" 

Natürlich könnte man diese iterativ auch tun:

// This will print to console every subpath 
for(int i = 1; i <= pathParts.Length; i++) 
{ 
    Console.WriteLine(string.Join("\\", pathParts.Take(i))); 
} 
1

Sie können dies tun:

Func<DirectoryInfo, IEnumerable<string>> flattenDirectory = null; 
    flattenDirectory = di => 
     di == null 
      ? Enumerable.Empty<string>() 
      : flattenDirectory(di.Parent).Concat(new [] { di.FullName }); 

Func<FileInfo, IEnumerable<string>> flattenFile = 
    fi => flattenDirectory(fi.Directory).Concat(new [] { fi.FullName });    

var path = @"D:\TEST_SOURCE\CV\SOURCECODE\ARMY.Data\ProceduresALL\test1\abdc\ISample.cs"; 
IEnumerable<string> parts = flattenFile(new FileInfo(path)); 

Das gibt mir:

 
D:\ 
D:\TEST_SOURCE 
D:\TEST_SOURCE\CV 
D:\TEST_SOURCE\CV\SOURCECODE 
D:\TEST_SOURCE\CV\SOURCECODE\ARMY.Data 
D:\TEST_SOURCE\CV\SOURCECODE\ARMY.Data\ProceduresALL 
D:\TEST_SOURCE\CV\SOURCECODE\ARMY.Data\ProceduresALL\test1 
D:\TEST_SOURCE\CV\SOURCECODE\ARMY.Data\ProceduresALL\test1\abdc 
D:\TEST_SOURCE\CV\SOURCECODE\ARMY.Data\ProceduresALL\test1\abdc\ISample.cs 

Um die Ausgabe zu erhalten, die Sie in der Frage gefragt haben, tun Sie einfach parts.Skip(2).