【问题标题】:Search file in Directory using partial name in C#在 C# 中使用部分名称在目录中搜索文件
【发布时间】:2017-08-05 16:29:04
【问题描述】:

我需要使用部分名称搜索目录中的文件。

例如:

Directory : c:\Path
Filename  : Error_005296-895632-12563.xml
Partial file name: 005296-895632-12563

我在下面试过了。

Directory.GetFiles("c:\Path", "*005296-895632-12563*.xml", SearchOption.AllDirectories). 

但是没有用

示例文件名是:

Error_005296-895632-12563.xml
005296-895632-12563_Response.xml
Duplicate_005296-895632-12563_Response.xml

【问题讨论】:

标签: c#


【解决方案1】:

您可以创建一个扩展方法并传递您想要查找的部分名称数组。

这样调用扩展方法

DirectoryInfo dir = new DirectoryInfo(@"c:\demo");

FileInfo[] files = dir.GetFilesBypartialName("Anc_def_", "ABC_123", "12_qweqweqw_123").ToArray();

下面是扩展方法

public static class DirectoryFindFile
{
    public static IEnumerable<FileInfo> GetFilesBypartialName(this DirectoryInfo dirInfo, params string[] partialFilenames)
    {
        if (partialFilenames == null)
            throw new ArgumentNullException("partialFilenames");

        var lstpartialFilenames = new HashSet<string>(partialFilenames, StringComparer.OrdinalIgnoreCase);

        return dirInfo.EnumerateFiles()
            .Where(f => lstpartialFilenames.Contains(f.Name));
    }

    public static IEnumerable<FileInfo> GetFilesBypartialFilenamesAllDir(this DirectoryInfo dirInfo, params string[] partialFilenames)
    {
        if (partialFilenames == null)
            throw new ArgumentNullException("partialFilenames");

        var lstpartialFilenames = new HashSet<string>(partialFilenames, StringComparer.OrdinalIgnoreCase);

        return dirInfo.EnumerateFiles("*.*", SearchOption.AllDirectories)
                       .Where(f => lstpartialFilenames.Contains(f.Name));
    }
}

【讨论】:

    【解决方案2】:

    这是我用来搜索目录的扩展功能

    public static IEnumerable<string> GetFiles(string path, string searchPatternExpression = "", SearchOption searchOption =    SearchOption.AllDirectories)
    {
    
        Regex reSearchPattern = new Regex(searchPatternExpression);
    
        return Directory.EnumerateFiles(path, "*", searchOption).Where(file => reSearchPattern.IsMatch(System.IO.Path.GetExtension(file)));
     }
    

    【讨论】:

      猜你喜欢
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-20
      • 2021-06-03
      • 1970-01-01
      • 2018-12-27
      • 2019-06-08
      相关资源
      最近更新 更多