Как определить, соответствует ли файл маске файла? - PullRequest
25 голосов
/ 07 апреля 2009

Мне нужно решить, подходит ли имя файла к маске файла. Маска файла может содержать * или? персонажи. Есть ли простое решение для этого?

bool bFits = Fits("myfile.txt", "my*.txt");

private bool Fits(string sFileName, string sFileMask)
    {
        ??? anything simple here ???
    }

Ответы [ 11 ]

0 голосов
/ 24 марта 2016

Моя версия, которая поддерживает ** подстановочный знак:

    static Regex FileMask2Regex(string mask)
    {
        var sb = new StringBuilder(mask);

        // hide wildcards
        sb.Replace("**", "affefa0d52e84c2db78f5510117471aa-StarStar");
        sb.Replace("*", "affefa0d52e84c2db78f5510117471aa-Star");
        sb.Replace("?", "affefa0d52e84c2db78f5510117471aa-Question");
        sb.Replace("/", "affefa0d52e84c2db78f5510117471aa-Slash");
        sb.Replace("\\", "affefa0d52e84c2db78f5510117471aa-Slash");

        sb = new StringBuilder(Regex.Escape(sb.ToString()));

        // unhide wildcards
        sb.Replace("affefa0d52e84c2db78f5510117471aa-StarStar", @".*");
        sb.Replace("affefa0d52e84c2db78f5510117471aa-Star", @"[^/\\]*");
        sb.Replace("affefa0d52e84c2db78f5510117471aa-Question", @"[^/\\]");
        sb.Replace("affefa0d52e84c2db78f5510117471aa-Slash", @"[/\\]");

        sb.Append("$");

        // allowed to have prefix
        sb.Insert(0, @"^(?:.*?[/\\])?");

        return new Regex(sb.ToString(), RegexOptions.IgnoreCase);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...