【问题标题】:Getting filenames without extensions except for duplicates获取除重复文件外没有扩展名的文件名
【发布时间】:2013-05-30 21:58:31
【问题描述】:

我正在使用文件夹中的所有文件名填充一个列表(减去带有 .blah 扩展名的文件名)。我想要没有扩展名的文件名,除非目录包含两个相同的文件名(但扩展名明显不同)。

这是一个例子......

从文件夹中获取以下文件:

blah.txt
blah.doc
test.txt
ex.dox

我希望在我的列表中发生的事情:

blah.txt
blah.doc
test
ex

这是我到目前为止所拥有的,但这显然只是添加了所有没有扩展名的文件,而不考虑同名文件:

foreach (string file in Directory.GetFiles(folderName).Where(name => !name.EndsWith(".blah")))
{
    list.Add(Path.GetFileNameWithoutExtension(file));
}

我想知道是否有一种很酷、干净的方法来做到这一点。

【问题讨论】:

    标签: c# linq filenames file-extension


    【解决方案1】:

    这看起来很干净:

    Directory.GetFiles(folderName)
    .Where(f => !f.EndsWith(".blah"))
    .Select (f => new FileInfo(f))
    .Select(f => new { NoExt = Path.GetFileNameWithoutExtension(f.Name),  f.Name})
    .GroupBy (f => f.NoExt)
    .SelectMany(g => g.Count() > 1 ? g.Select(f => f.Name) 
                                   : g.Select (f => f.NoExt))
    

    【讨论】:

    • 太棒了!顺便说一句,您在第一个 .Select 之前缺少一个括号。
    【解决方案2】:

    使用下面的文字。希望对您和其他人有所帮助:

    Directory.GetFiles(directory, .extension)
             .Select(path => Path.GetFileNameWithoutExtension(path))
             .ToArray();
    

    【讨论】:

      猜你喜欢
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-29
      相关资源
      最近更新 更多