2017-07-12 126 views
1

所以我有一個與我的.exe控制檯應用程序在同一目錄中的文件夾。我想列出該文件夾內的所有文件夾(稱爲ClientFiles),但我不想要完整的路徑。所以,如果我有這樣的層次結構:將名稱而不是指定文件夾中所有文件夾的路徑存儲到列表中?

ClientFiles 

---\ Folder1 

---\ Folder2 

---\ Folder3 

我應該結束了包含字符串列表:「Folder1中」,「文件夾2」,「Folder3」。

這就是我現在所擁有的:

List<string> clientNumbers = Directory 
    .GetDirectories(AppDomain.CurrentDomain.BaseDirectory + "ClientFiles\\") 
    .ToList<string>(); 

,但它的返回列表中包含每個元素的完整路徑。任何快速解決這個問題的方法?我想我可以通過foreach並刪除前面的路徑文本,但似乎是如此之多。

回答

1

有幾種方法可以完成此任務。

首先是簡單地移除組件,您已經知道:

string directory = AppDomain.CurrentDomain.BaseDirectory + "ClientFiles\\"; 
List<string> clientNumbers = Directory 
    .GetDirectories(directory) 
    .Select(x => x.Substring(AppDomain.CurrentDomain.BaseDirectory.Length - 1) 
    .ToList(); 

假設你只需要文件的名稱(或者如果它是一個文件夾對象文件夾的名字),你可以使用Path class

List<string> clientNumbers = Directory 
    .GetDirectories(directory) 
    .Select(x => Path.GetFileName(x)) 
    .ToList(); 
+0

不希望fileNames,特別是在這裏只需要文件夾名稱。 –

+0

@CapnJack這是一個函數名稱的誤導,但'Path.GetFileName(字符串)'它會給你的文件夾名稱,如果它是一個文件夾對象。 – JNYRanger

+1

哇,這是誤導,但它的作品!打算將您的答案標記爲最簡單的答案。謝謝 –

0

您可以在年底如添加.Select(x=>x.Split('\').LastOrDefault())

List<string> clientNumbers = Directory.GetDirectories(AppDomain.CurrentDomain.BaseDirectory + "ClientFiles\\").ToList<string>() 
    .Select(x=>x.Split('\').LastOrDefault()); 
0

使用LINQ lambda表達式:

List<string> clientNumbers = Directory.GetDirectories(
          AppDomain.CurrentDomain.BaseDirectory + "ClientFiles\\") 
          .ToList<string>().Select(s=>s.Split("\\").Last()); 

LastOrDefault將返回相同的,因爲字符串可空

2

帶着幾分的LINQ:

List<string> clientNumbers = System.IO.Directory.GetDirectories(AppDomain.CurrentDomain.BaseDirectory + "ClientFiles\\") 
.Select(x => x.Replace(AppDomain.CurrentDomain.BaseDirectory + "ClientFiles\\", "")).ToList(); 
+0

完美的是我想到的。不過,我會將JNYRanger的回答標記爲答案,因爲它更簡單一些。 –

+0

每個對他們自己我想;)。但很高興爲您解決了這個問題 – Jaxi

相關問題