/// <summary> /// Localizar os nomes de arquivos que conferem com o filtro indicado. /// </summary> /// <param name="pathFilter"> /// Filtro para pesquisa de arquivos. /// /// São suportados os caracteres curinga: /// *, para indicar um trecho de nome, **, para indicar qualquer quantidade /// de pastas no caminho, e ?, para indicar um único caracter na posição. /// /// Por exemplo: O filtro "\Path\*.txt" retorna todos os arquivos TXT dentro da /// pasta "Path". O filtro "\Path\**\*.txt" retorna todos os arquivos TXT dentro /// da pasta "Path" ou em qualquer outra pasta na hierarquia de "Path". /// </param> /// <returns> /// O status da pesquisa mais os arquivos lidos. /// Em geral 200-OK com a lista dos arquivos lidos ou 404-NotFound com uma /// lista vazia caso nada seja encontrado. /// </returns> public Ret <string[]> FindResources(string pathFilter) { try { pathFilter = pathFilter.Replace(@"/", @"\"); if (!pathFilter.StartsWith(@"\")) { pathFilter = $@"\**\{pathFilter}"; } var pattern = pathFilter .Replace(@".", @"[.]") .Replace(@"**", @"§") .Replace(@"*", @"[^\]*") .Replace(@"\§", @"(|\.*)") .Replace(@"?", @".") .Replace(@"\", @"\\") ; var regex = new Regex($"^{pattern}$", RegexOptions.IgnoreCase); var files = ( from path in ResourcePaths where regex.IsMatch(path) select path ).ToArray(); return(files.Length > 0 ? Ret.OK(files) : Ret.NotFound(files)); } catch (Exception ex) { return(Ret.FailWithValue(ex, new string[0])); } }