如果用 Win32 API 的话可以直接得到这个目录,以下是 C++ 代码:TCHAR szBuff[MAX_PATH] = _T(""); ::SHGetSpecialFolderPath(NULL, szBuff, CSIDL_FONTS , FALSE);
C# 完整代码,已测试无误:using System; using System.Runtime.InteropServices; using System.Text; using System.Security; using System.Security.Permissions;namespace ConsoleTest { class Class1 { [SuppressUnmanagedCodeSecurity] internal sealed class Win32Native { [DllImport("shfolder.dll", CharSet=CharSet.Auto)] internal static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, int dwFlags, StringBuilder lpszPath); }
string s=environment["windir"].ToString();
::SHGetSpecialFolderPath(NULL, szBuff, CSIDL_FONTS , FALSE);
using System.Runtime.InteropServices;
using System.Text;
using System.Security;
using System.Security.Permissions;namespace ConsoleTest
{
class Class1
{
[SuppressUnmanagedCodeSecurity]
internal sealed class Win32Native
{
[DllImport("shfolder.dll", CharSet=CharSet.Auto)]
internal static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, int dwFlags, StringBuilder lpszPath);
}
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
StringBuilder builder1 = new StringBuilder(260);
Win32Native.SHGetFolderPath(IntPtr.Zero, 20, IntPtr.Zero, 0, builder1);
string path = builder1.ToString();
new FileIOPermission(FileIOPermissionAccess.PathDiscovery, path).Demand();
Console.WriteLine(path);
}
}
}