路径作为模式匹配方法的一部分,类似于Directory.GetFiles

本文关键字:类似于 Directory GetFiles 一部分 模式匹配 方法 路径 | 更新日期: 2023-09-27 18:13:03

Directory.GetFiles有一个接受路径和搜索模式的过载:

var files = Directory.GetFiles(@"c:'path'to'folder", "*.txt");

返回指定文件夹中与模式匹配的文件。是否有一个内置的。net方法将路径作为搜索模式的一部分?

var files1 = Something.GetFiles(@"c:'path'to'folder'*.txt");

路径作为模式匹配方法的一部分,类似于Directory.GetFiles

不,没有这样的东西,但我有无数次这样的需求。幸运的是,它很容易写:

public string[] SearchFiles(string query)
{
    return Directory.GetFiles(
        Path.GetDirectoryName(query),
        Path.GetFileName(query));
}

一个不那么原始的版本可以处理更多的特殊情况(如果你需要的话):

public string[] SearchFiles(string query)
{
    if (IsDirectory(query))
        return Directory.GetFiles(query, "*.*");
    return Directory.GetFiles(
        Path.GetDirectoryName(query),
        Path.GetFileName(query));
}
private static bool IsDirectory(string path)
{
    if (String.IsNullOrWhiteSpaces(path))
        return false;
    if (path[path.Length - 1] == Path.DirectorySeparatorChar)
        return true;
    if (path[path.Length - 1] == Path.AltDirectorySeparatorChar)
        return true;
    if (path.IndexOfAny(Path.GetInvalidPathChars()) != -1)
        return false;
    return Directory.Exists(path);
}

使用这个新版本(参见IsDirectory()代码),您可以这样使用它:

SearchFiles(@"c:'windows'*.*");
SearchFiles(@"c:'windows'");
SearchFiles(@"c:'windows");