我想知道哪个文件夹包含名称中包含$
的文件
但是如果我使用这段代码,我会得到重复的文件夹名称:
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
应仅获得结果1 20170321
答案 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();