2

我正在使用文件夹中的所有文件名填充一个列表(减去具有 .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));
}

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

4

2 回答 2

3

这看起来很干净:

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))
于 2013-05-30T22:16:15.010 回答
0

使用以下文本。希望对您和其他人有所帮助:

Directory.GetFiles(directory, .extension)
         .Select(path => Path.GetFileNameWithoutExtension(path))
         .ToArray();
于 2016-03-02T06:21:46.950 回答