【问题标题】:C# - Get subfolder name that contain specific character of fileC# - 获取包含文件特定字符的子文件夹名称
【发布时间】:2017-08-14 06:28:03
【问题描述】:

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

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:\test\20170321\2$4.txt
  • C:\test\20170322\567.txt
  • C:\test\20170322\abc.txt

应该只得到结果 1 20170321

【问题讨论】:

  • 那么只选择目录名,并且唯一。

标签: c# linq directory console-application


【解决方案1】:

应该这样做:

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();

【讨论】:

  • @Y.C 不客气。我找到了访问文件夹的直接方法。看看编辑。我不知道它是否更好,但它不会尝试访问文件名并获取文件夹。它直接访问文件夹
猜你喜欢
  • 1970-01-01
  • 2017-08-16
  • 2020-05-03
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多