c# - 查找目录中所有文件的更好方法

标签 c# performance file-search

我正在寻找一种方法来改进我的文件搜索。

目前我正在使用这种方法:

public IEnumerable<FileInfo> FindFilesInDirectory(string dirPath, string searchName)
{
    return Directory.Exists(dirPath)
               ? Directory.GetFiles(dirPath, "*.*", SearchOption.AllDirectories)
                          .ToList()
                          .ConvertAll(x => new FileInfo(x))
                          .Where(x => x.Name.ToLower().Contains(searchName.ToLower()))
               : null;
}

有没有更快或更好的方法来做到这一点?

谢谢

最佳答案

不过,这几乎是微优化,您可以提高可读性并且可以添加异常处理。

您还应该使用 EnumerateFiles(如果可能),它不需要在开始过滤之前将所有内容加载到内存中。此外,将 EqualsStringComparison.OrdinalIgnoreCase 一起使用,而不是 ToLower,因为它更高效且更不容易出错 ( the Turkey test )。

public IEnumerable<FileInfo> FindFilesInDirectory(string dirPath, string searchName)
{
    if (Directory.Exists(dirPath))
    {
        var dir = new DirectoryInfo(dirPath);
        return dir.EnumerateFiles("*.*", SearchOption.AllDirectories)
                  .Where(fi => fi.Name.Equals(searchName, StringComparison.OrdinalIgnoreCase));
    }
    else
        throw new ArgumentException("Directory doesn't exist.", dirPath);
}

关于c# - 查找目录中所有文件的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17422562/

相关文章:

java - 从每个窗口在 Eclipse 中打开 Type (Ctrl+Shift+T)

c# - C# 中的三次鼠标单击?

sql - Postgres 查询调优

bash - 使用 grep 在不同的行上搜索多个关键字

Eclipse Maven 显示同一文件的多个路径

c# - null 或空检查的代码优化

c# - 在 C# 中编码字符

c# - 将字符串数组添加到 JObject

c# - 如果数据库中没有这样的行,我将返回什么?

javascript - 预测在 javascript 中完全加载页面的时间