Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中使用部分名称搜索目录中的文件#_C# - Fatal编程技术网

C# 在C中使用部分名称搜索目录中的文件#

C# 在C中使用部分名称搜索目录中的文件#,c#,C#,我需要使用部分名称搜索目录中的文件 例: 我在下面试过了 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 这是我用来搜索目

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

例:

我在下面试过了

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

这是我用来搜索目录的扩展函数

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)));
 }
公共静态IEnumerable GetFiles(字符串路径,字符串searchPatternExpression=“”,SearchOption SearchOption=SearchOption.allDirectory)
{
Regex reSearchPattern=新的Regex(searchpattern表达式);
返回Directory.EnumerateFiles(路径“*”,searchOption).Where(文件=>reSearchPattern.IsMatch(System.IO.path.GetExtension(文件));
}

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

像这样调用扩展方法

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));
    }
}
公共静态类DirectoryFindFile
{
公共静态IEnumerable GetFilesBypartialName(此DirectoryInfo dirInfo,参数字符串[]PartialFileName)
{
if(partialFilenames==null)
抛出新ArgumentNullException(“partialFilenames”);
var lstpartialFilenames=新哈希集(partialFilenames,StringComparer.OrdinalIgnoreCase);
返回dirInfo.EnumerateFiles()
其中(f=>lstpartialFilenames.Contains(f.Name));
}
公共静态IEnumerable GetFilesBypartialFilenamesAllDir(此DirectoryInfo-dirInfo,参数字符串[]partialFilenames)
{
if(partialFilenames==null)
抛出新ArgumentNullException(“partialFilenames”);
var lstpartialFilenames=新哈希集(partialFilenames,StringComparer.OrdinalIgnoreCase);
返回dirInfo.EnumerateFiles(“**”,SearchOption.AllDirectory)
其中(f=>lstpartialFilenames.Contains(f.Name));
}
}

可能有助于复制:您甚至不需要正则表达式或模式,只需在目录中的文件名上循环并使用
字符串即可。包含的内容将因语言而异。请选择c#或vb.net
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));
    }
}