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

时间:2017-07-12 15:48:48

标签: c# windows list path directory

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

ClientFiles

---\ Folder1

---\ Folder2

---\ Folder3

我最终会得到一个包含字符串的列表:“Folder1”,“Folder2”,“Folder3”。

这就是我现在所拥有的:

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

但它返回的列表包含每个元素的完整路径。有什么快速解决方法吗?我想我可以预先通过并删除前面的路径文本,但这似乎是多余的。

4 个答案:

答案 0 :(得分:2)

有一点LINQ:

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

答案 1 :(得分: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();

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

使用LINQ lambda表达式:

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

LastOrDefault将返回相同的内容,因为字符串可以为空

相关问题