我需要在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'不包含定义
答案 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();