Как найти неизвестную папку в Dictionary
Вот у меня есть
public static Dictionary<string, string> data = new Dictionary<string, string>()
{
{ "PATH", @"C:\Users\AdminST\AppData\Roaming\Adobe\Flash Player\NativeCache\bcore-22.0.3497.01.2.12.0" },
}
Как мне проходясь циклом если на компьютере допустим изменилось bcore-22.0.3497.01.2.12.0 изменилась версия (число) то оно его уже не найдёт.
Я хотел попробовать что-то типо добавить: bcore-*.* но как можно заставит через foreach искать что после . в EnumerateFiles
foreach (var spisok in data)
{
foreach (var files in Directory.EnumerateFiles(spisok, "*.*")
{
// ...
}
}
Ответы (2 шт):
Есть 2 метода:
1. Если версия всегда с одинаковым количеством цифр.
Для поиска по такому лёгкому паттерну подойдёт Directory.GetDirectories(путь, паттерн названия папки, метод поиска)
string path = "D:\\NativeCache";
string pattern = "bcore-*.*.*";
string[] dirs = Directory.GetDirectories(path, pattern, SearchOption.TopDirectoryOnly); //SearchOption.TopDirectoryOnly нужен для поиска папок только в поверхностной папке, что-бы случайно не словить папку из какой-нибудь под-папки.
Далее можно сделать проверку dirs.Length > 0 и взять первую папку из массива.
2. Если не важна версия и нужно найти по началу папки.
string path = "D:\\NativeCache";
string startWithPattern = "bcore-";
string[] dirs = Directory.GetDirectories(path);
List<string> predictDirs = new List<string>();
foreach (string dir in Directory.EnumerateDirectories(path))
{
string dirName = dir.Split('\\')[^1];
if (dirName.StartsWith(startWithPattern))
predictDirs.Add(dir);
}
Вероятно, вам может помочь File globbing in .NET.
Код может выглядеть следующим образом:
Matcher matcher = new Matcher();
matcher.AddInclude("bcore-*");
var directoryPath = @"C:\Users\AdminST\AppData\Roaming\Adobe\Flash Player\NativeCache";
foreach (var result in matcher.GetResultsInFullPath(directoryPath))
Console.WriteLine(result);
Указываете шаблон поиска и путь к каталогу. Их можете брать из словаря.