C# - 获取包含文件特定字符的子文件夹名称

时间:2017-03-22 08:46:39

标签: c# directory console-application

我想知道哪个文件夹包含名称中包含$的文件 但是如果我使用这段代码,我会得到重复的文件夹名称:

string local = @"C:\test\";
string[] dirs = Directory.GetFiles(local, "*$*", SearchOption.AllDirectories);
foreach(string dir in dirs)
{
   string a = Path.GetFileName(Path.GetDirectoryName(dir));
}

这是测试文件夹的内容:

  
      
  • C:\ test \ 20170321 \ $ 123.txt
  •   
  • C:\测试\ 20170321 \ 2 $ 4.txt
  •   
  • C:\测试\ 20170322 \ 567.txt
  •   
  • C:\测试\ 20170322 \的abc.txt
  •   

enter image description here

应仅获得结果1 20170321

1 个答案:

答案 0 :(得分:4)

这应该这样做:

string local = @"C:\test\";
string[] dirs = Directory.GetFiles(local, "*$*", SearchOption.AllDirectories);
List<string> singleDirNames = dirs.Select(x=> Path.GetDirectoryName(x)).Distinct().ToList();

说明:从目录中的所有文件名中选择并仅将其不同的值放入列表

修改

正如我刚刚意识到的那样,你不想要整个路径,所以要从你的帖子中获得结果,你需要使用Path.GetFileName()(应该有另一种方式,我正在寻找它) :

List<string> singleDirNames = dirs
                           .Select(x=> Path.GetFileName(Path.GetDirectoryName(x)))
                           .Distinct().ToList();

找到它。这实际上是访问受this answer启发的包含文件夹的直接方式:

List<string> singleDirNames = dirs.Select(x=> new FileInfo(x).Directory.Name)
                                  .Distinct().ToList();