2013-06-20 90 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为你做