如何从DirectoryInfo中最优雅地获取指定名称的FileInfo?
从DirectoryInfo获取指定名称FileInfo的最优方式
两种实现的优缺点分析
方法一:通过EnumerateFiles遍历获取
var myFileInfo = myDirectoryInfo.EnumerateFiles("filename.ext").FirstOrDefault();
- 行为:会实际遍历目标目录,匹配到指定文件名的文件后立即返回对应的FileInfo;如果文件不存在,返回
null。 - 优势:一步完成“查找+验证存在性”,返回的结果要么是真实存在的文件信息,要么是
null,后续无需额外判断文件是否存在。 - 劣势:涉及IO操作,不过因为指定了精确文件名,
EnumerateFiles会在找到第一个匹配项后停止遍历,性能开销很小。
方法二:直接构造FileInfo对象
var myFileInfo = new FileInfo(Path.Combine(myDirectoryInfo.FullName, "filename.ext"));
- 行为:仅通过路径构造FileInfo实例,不会验证文件是否真实存在。需要通过
myFileInfo.Exists属性手动判断文件状态。 - 优势:完全不涉及IO操作,性能极高,适合仅需构造文件对象、后续自行处理存在性的场景。
- 劣势:返回的对象可能指向不存在的文件,若直接调用其读写方法会抛出异常。
更优选择的判断标准
没有绝对的“最优雅”,需根据实际需求选择:
- 若你需要立即确认文件存在,并直接获取有效文件信息,方法一是更合适的选择。
- 若你只是需要构造FileInfo对象,后续会自行处理文件存在性验证,方法二更高效简洁。
补充说明
另外,你可能会想到用myDirectoryInfo.GetFiles("filename.ext").FirstOrDefault(),但EnumerateFiles是延迟加载模式,比一次性加载所有匹配文件到数组的GetFiles性能更优,尤其是在目录文件较多的场景下。
内容的提问来源于stack exchange,提问作者Achim Stuy
相关产品推荐
相关产品推荐

