使用目标框架3.5从控制台应用程序访问Fonts文件夹

时间:2012-11-28 03:55:49

标签: c# console-application

我需要在c:/ windows /文件夹中获取特定字体的路径 当目标框架为4.0时,以下代码可以正常工作 但我的应用程序只能以3.5为目标,我需要在控制台应用程序c#

中使用它

我怎样才能做到这一点?感谢。

string arialuniTff = path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Fonts), "arial.TTF");

3.5中的错误消息:'System.Environment.SpecialFolder'不包含定义

2 个答案:

答案 0 :(得分:4)

fonts文件夹通常位于%windir%\Fonts,因此您应该能够获得如下位置:

Path.Combine(
    System.Environment.GetEnvironmentVariable("windir"),
    "Fonts");

它是一个虚拟文件夹,所以理论上它可以位于其他地方。在实践中,我从未见过发生或听说过这种情况。 (微软对这个位置有足够的信心在他们的“how to install a font”页面上引用它)。我敢肯定,如果你试图找到一个特定的文件名,那么你已经有了很好的错误处理。

奖金信息:

您可能已经知道这一点,但如果您需要知道特定版本的.net框架中可用的类,方法等,可以从MSDN中找到。转到文档页面(在Environment.SpecialFolder上说明这一页),然后单击左上角的“.NET Framework 4.5”链接并选择其他版本以查看您正在查看的页面那个版本。

答案 1 :(得分:0)

请参阅How to get the path to CSIDL_COMMON_DOCUMENTS in .NET 3.5?

它提供const int CSIDL_COMMON_DOCUMENTS = 0x002e;的位置。

对于Fonts文件夹,请使用const int CSIDL_FONTS = 0x0014;

这将是:

[DllImport("shell32.dll"), CharSet = CharSet.Auto]
static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, uint dwFlags, [Out] StringBuilder pszPath);

const int CSIDL_FONTS = 0x0014;
const int CSIDL_FLAG_CREATE = 0x8000;

StringBuilder sb = new StringBuilder();

int retVal = SHGetFolderPath(IntPtr.Zero,
                                 CSIDL_FONTS | CSIDL_FLAG_CREATE,
                                 IntPtr.Zero,
                                 0,
                                 sb);
Debug.Assert(retVal >= 0);  // assert that the function call succeeded
String folderLocation = sb.ToString();