2013-05-30 598 views
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)); 
} 

我想知道是否有一個很酷,乾淨的方式來做到這一點。

回答

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)) 
+1

太棒了!順便說一句,你在第一個選擇前錯過了括號。 – jsirr13

0

使用下面的文字。希望它能幫助你和其他人:

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