Вот как бы я это сделал:
private static bool IsFontInstalled(string name)
{
using (InstalledFontCollection fontsCollection = new InstalledFontCollection())
{
return fontsCollection.Families
.Any(x => x.Name.Equals(name, StringComparison.CurrentCultureIgnoreCase));
}
}
Следует отметить, что свойство Name
не всегда то, что вы ожидаете увидеть в C: \ WINDOWS \ Fonts. Например, у меня установлен шрифт "Arabic Typsetting Regular". IsFontInstalled("Arabic Typesetting Regular")
вернет false, но IsFontInstalled("Arabic Typesetting")
вернет true. («Арабский набор текста» - это название шрифта в средстве предварительного просмотра шрифтов Windows.)
Что касается ресурсов, я выполнил тест, в котором я вызывал этот метод несколько раз, и тест завершался всего за несколько миллисекунд каждый раз. Моя машина немного перегружена, но если вам не нужно выполнять этот запрос очень часто, кажется, что производительность очень хорошая (и даже если вы это сделали, для этого и нужно кэширование).