获取目录类型【Fonts字体】的路径为"C:\Windows\Fonts",打开路径效果为下
返回到windows目录再次进入Fonts文件夹时提示“没有打开该文件的权限。”
文件管理器手动进入"C:\Windows\Fonts"查看字体属性,发现字体在"C:\Users\refra\AppData\Local\Microsoft\Windows\Fonts"
这是AI的回答:
你遇到的这个现象,其实是 Windows 10/11 从 Creators Update 开始对字体存放方式做了调整 导致的。
具体原因是这样的:
系统字体路径的变化
传统上,系统字体目录是固定在 C:\Windows\Fonts 下(这是一个特殊文件夹,带有 Shell Namespace 扩展)。
C:\Windows\Fonts
但从 Windows 10 1803 左右开始,微软引入了 “每用户字体(Per-User Fonts)” 概念。 用户安装的字体不会放到系统的 C:\Windows\Fonts(需要管理员权限),而是放在
%LOCALAPPDATA%\Microsoft\Windows\Fonts
即你看到的:
C:\Users\<用户名>\AppData\Local\Microsoft\Windows\Fonts
你看到的权限问题
当你在文件管理器里直接打开 C:\Windows\Fonts 时,其实并不是访问普通的文件夹,而是访问一个由 shell:::{...} 映射的虚拟文件夹。它会合并显示 系统字体 和 用户字体。
shell:::{...}
如果你先进入 C:\Windows,然后再双击 Fonts 文件夹,Windows 有时会直接尝试访问物理目录,而不是通过 Shell 映射,就可能触发“没有权限”提示,因为 C:\Windows\Fonts 是受保护的系统目录。
C:\Windows
Fonts
系统字体目录有 TrustedInstaller 权限,普通用户没有直接读写权限,除非用管理员或特殊方式访问。
为什么属性里看到的路径是用户目录
这是因为你查看的是一个按用户安装的字体,它的实际物理文件在 C:\Users\...\Fonts,而 C:\Windows\Fonts 只是一个合并视图。
C:\Users\...\Fonts
类似于 Windows 的“库”功能,不同来源的文件合并显示,但物理位置不一定相同。
系统字体:物理路径 → C:\Windows\Fonts(需要管理员权限才能修改/删除)
用户字体:物理路径 → %LOCALAPPDATA%\Microsoft\Windows\Fonts(无需管理员权限)
Shell 路径(推荐):
shell:fonts
在资源管理器地址栏输入即可,始终能正确显示所有可用字体。
💡 建议 如果你在程序中获取字体目录路径,不要直接硬编码 C:\Windows\Fonts,而是:
获取系统字体目录:
string systemFonts = Environment.GetFolderPath(Environment.SpecialFolder.Fonts);
获取当前用户字体目录:
string userFonts = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Microsoft", "Windows", "Fonts" );
这样无论字体安装到系统还是用户目录,都可以定位到实际文件。
我可以帮你画一个**“Windows 字体存放机制”示意图**,直观解释 C:\Windows\Fonts 和用户字体目录的关系,这样就不会搞混了。你要我画吗?