1

有没有什么聪明的方法可以在 C# 中通过文件名和未知扩展名轻松找到文件?

我有一个图像文件夹,其中包含不同类型的图像 .jpg、.gif 和 .png。程序只知道图像的名称,而不是扩展名。

是否可以通过文件名获取文件,而无需执行一些大的递归资源消耗循环?

4

4 回答 4

10

您可以使用该EnumerateFiles方法并指定搜索模式:

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

这当然会返回IEnumerable<string>与此搜索模式匹配的所有文件中的一个。如果您知道只能有一个,或者想获得列表中的第一个,只需将其与 LINQ 链接以进一步过滤结果。

于 2013-06-20T07:10:27.670 回答
1

对的,这是可能的。使用接受搜索模式作为第二个参数的重载Directory.GetFiles方法:

string[] files = Directory.GetFiles(@"c:\images", fileName + ".*");
于 2013-06-20T07:11:54.897 回答
1

Linq 来拯救

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

让 linq 为你做循环和过滤

于 2013-06-20T07:15:35.717 回答
0

有几个选项:

  1. 提前建立你的文件索引(简单的字典就可以了)。
  2. 使用 Windows 搜索 API
  3. 使用 EnumerateFiles,虽然在性能方面这类似于经过优化的大递归遍历。
于 2013-06-20T07:11:30.843 回答