将名称而不是指定文件夹中所有文件夹的path存储到列表中?

所以我有一个与我的.exe控制台应用程序相同的目录中的文件夹。 我想列出该文件夹内的所有文件夹(它被称为ClientFiles ),但我不想要完整的path。 所以如果我有这样的层次结构:

 ClientFiles ---\ Folder1 ---\ Folder2 ---\ Folder3 

我应该得到一个包含string的列表:“文件夹1”,“文件夹2”,“文件夹3”。

这就是我现在所拥有的:

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

但是它返回的列表包含每个元素的完整path。 任何快速解决这个问题的方法? 我想我可以通过foreach删除前面的path文本,但似乎是如此额外。

有几种方法可以做到这一点。

首先是简单地删除你已经知道的组件:

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

假设你只想要文件名(或文件夹的名称,如果它是一个文件夹对象),你可以使用Path

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

有了一点LINQ:

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

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

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

使用LINQ lambda表达式:

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

LastOrDefault将返回相同的字符串为空