C# 是否将指定文件夹中所有文件夹的名称而不是路径存储到列表中?

C# 是否将指定文件夹中所有文件夹的名称而不是路径存储到列表中?,c#,windows,list,path,directory,C#,Windows,List,Path,Directory,因此,我的.exe控制台应用程序所在的目录中有一个文件夹。我想列出该文件夹中的所有文件夹(称为ClientFiles),但不需要完整路径。如果我有这样的层次结构: ClientFiles ---\ Folder1 ---\ Folder2 ---\ Folder3 我应该以一个包含字符串的列表结束:“Folder1”、“Folder2”、“Folder3” 这就是我现在拥有的: List<string> clientNumbers = Directory .GetDire

因此,我的.exe控制台应用程序所在的目录中有一个文件夹。我想列出该文件夹中的所有文件夹(称为
ClientFiles
),但不需要完整路径。如果我有这样的层次结构:

ClientFiles

---\ Folder1

---\ Folder2

---\ Folder3
我应该以一个包含字符串的列表结束:“Folder1”、“Folder2”、“Folder3”

这就是我现在拥有的:

List<string> clientNumbers = Directory
  .GetDirectories(AppDomain.CurrentDomain.BaseDirectory + "ClientFiles\\")
  .ToList<string>();
List clientNumbers=目录
.GetDirectory(AppDomain.CurrentDomain.BaseDirectory+“ClientFiles\\”)
.ToList();
但是它返回的列表包含每个元素的完整路径。有什么快速的解决方法吗?我想我可以浏览并删除前面的路径文本,但这似乎太多余了。

您可以添加
。在末尾选择(x=>x.Split('\')。LastOrDefault())
,例如:

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

使用LINQ lambda表达式:

List<string> clientNumbers = Directory.GetDirectories(
                             AppDomain.CurrentDomain.BaseDirectory + "ClientFiles\\")
                             .ToList<string>().Select(s=>s.Split("\\").Last());
List clientNumbers=Directory.GetDirectories(
AppDomain.CurrentDomain.BaseDirectory+“ClientFiles\\”)
.ToList().Select(s=>s.Split(“\\”).Last();
LastOrDefault将返回相同的结果,因为字符串可以为null,带有一点LINQ:

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

有几种方法可以实现这一点

第一种方法是简单地移除您已经知道的组件:

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

不需要文件名,特别是这里只需要文件夹名。@CapnJack函数名有点误导,但是
Path.GetFileName(string)
如果是文件夹对象,它会给你文件夹名。哇,这是误导,但它可以工作!将您的答案标记为最简单的答案。谢谢,这就是我的想法。然而,我将把JNYRanger的回答标记为答案,因为它有点简单。我想每个人都有自己的答案;)。但很高兴这件事为你澄清了
List<string> clientNumbers = Directory
  .GetDirectories(directory)
  .Select(x => Path.GetFileName(x))
  .ToList();