win11获取目录类型【Fonts字体】错误

BUG反馈 · 56 次浏览
糕等杠鲸 创建于 14天0小时前

获取目录类型【Fonts字体】的路径为"C:\Windows\Fonts",打开路径效果为下

返回到windows目录再次进入Fonts文件夹时提示“没有打开该文件的权限。”

文件管理器手动进入"C:\Windows\Fonts"查看字体属性,发现字体在"C:\Users\refra\AppData\Local\Microsoft\Windows\Fonts"


回复内容
CL 13天15小时前
#1

这是AI的回答:

你遇到的这个现象,其实是 Windows 10/11 从 Creators Update 开始对字体存放方式做了调整 导致的。

具体原因是这样的:

  1. 系统字体路径的变化

    • 传统上,系统字体目录是固定在 C:\Windows\Fonts 下(这是一个特殊文件夹,带有 Shell Namespace 扩展)。

    • 但从 Windows 10 1803 左右开始,微软引入了 “每用户字体(Per-User Fonts)” 概念。
      用户安装的字体不会放到系统的 C:\Windows\Fonts(需要管理员权限),而是放在

      %LOCALAPPDATA%\Microsoft\Windows\Fonts
      

      即你看到的:

      C:\Users\<用户名>\AppData\Local\Microsoft\Windows\Fonts
      
  2. 你看到的权限问题

    • 当你在文件管理器里直接打开 C:\Windows\Fonts 时,其实并不是访问普通的文件夹,而是访问一个由 shell:::{...} 映射的虚拟文件夹。它会合并显示 系统字体用户字体

    • 如果你先进入 C:\Windows,然后再双击 Fonts 文件夹,Windows 有时会直接尝试访问物理目录,而不是通过 Shell 映射,就可能触发“没有权限”提示,因为 C:\Windows\Fonts 是受保护的系统目录。

    • 系统字体目录有 TrustedInstaller 权限,普通用户没有直接读写权限,除非用管理员或特殊方式访问。

  3. 为什么属性里看到的路径是用户目录

    • 这是因为你查看的是一个按用户安装的字体,它的实际物理文件在 C:\Users\...\Fonts,而 C:\Windows\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 和用户字体目录的关系,这样就不会搞混了。你要我画吗?

回复主贴