2013-06-20 141 views
0

是否有任何聰明的方法可以通過其名稱和未知擴展名在C#中輕鬆找到文件?通過名稱和未知擴展名查找文件C#

我有一個圖像文件夾與不同類型的圖像.jpg,.gif和.png。 而所有程序知道的是圖像的名稱,而不是擴展名。

是否可以通過名稱獲取文件,而不需要執行一些大的遞歸資源消耗循環?

+0

號的循環和過濾你必須做循環。但是,它並不完全是資源消耗,當然是從所需的磁盤I/O開始。另外,你是否考慮過以下情況:如果兩個文件存在不同的擴展名'foo1.jpg'和'foo2.png'會怎麼樣?確保你可以處理這個。 –

+0

System.IO.Path.GetExtension(「A.txt」)如何? –

+0

爲了保持完整性,請注意到目前爲止所有答案都會以某種方式進行「循環」。這不是一件壞事:最後,這是沒有辦法的。 –

回答

8

你可以使用EnumerateFiles方法並指定一個搜索模式:

var files = Directory.EnumerateFiles(@"c:\work", "somefilename.*"); 

這當然會返回匹配該搜索模式的所有文件的IEnumerable<string>。如果您知道只能有一個,或想要獲得列表中的第一個,只需使用LINQ鏈接來進一步過濾結果。

+0

不錯,這就是我一直在尋找的。謝謝,我會在8分鐘內接受:P – Martin

0

有幾個選項:

  1. 建立事先的文件索引(簡單的字典將做 伎倆)。
  2. Use windows search API
  3. 使用EnumerateFiles,儘管性能明智,這類似於位優化的大遞歸遍歷。
1

是的,這是可能的。使用重載Directory.GetFiles方法,其作爲第二個參數搜索模式:

string[] files = Directory.GetFiles(@"c:\images", fileName + ".*"); 
1

LINQ到營救

var filenames = Directory.GetFiles(@"C:\Windows\System32").Select(f => Path.GetFileName(f)).Where(fn => fn.StartsWith("ap")); 

讓LINQ爲你做