0

我需要在我的 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”不包含定义

4

2 回答 2

4

字体文件夹通常位于%windir%\Fonts,因此您应该能够像这样获得该位置:

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

它是一个虚拟文件夹,因此理论上它可以位于其他地方。在实践中,我从未见过或听说过这种情况。(微软对这个位置有足够的信心,可以在他们的“如何安装字体”页面上引用它)。不过,我敢肯定,如果您试图找到这样的特定文件名,那么您已经有了很好的错误处理能力。

奖金信息:

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

于 2012-11-28T04:26:25.310 回答
0

请参阅如何在 .NET 3.5 中获取 CSIDL_COMMON_DOCUMENTS 的路径?

它为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();
于 2016-01-28T14:40:33.370 回答