You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C编写的UEFI二进制运行时fopen无法读取同目录txt文件是什么原因

EFI程序无法打开同目录文本文件的原因分析

可能的原因

  • UEFI环境的默认工作目录与EFI二进制文件所在目录不绑定。UEFI Shell的当前工作目录是你执行EFI程序时所在的目录,而非EFI文件本身的存放目录。例如EFI文件和txt文件都放在fs0:\myapp\目录下,但你在fs0:\根目录执行myapp\test.efi,fopen会去根目录查找new.txt,自然查找失败。
  • 你使用的UEFI C标准库(如EDK2 StdLib)的相对路径解析逻辑仅基于当前工作目录,不会自动检索EFI程序自身的存放目录。
  • 文件名或属性不符合要求:UEFI下部分文件系统区分大小写,若实际文件名为New.txt或NEW.TXT,写new.txt会找不到;若文件设置了隐藏、系统属性,也可能导致fopen读取失败。
  • 若你使用QEMU+OVMF等模拟环境运行,可能存在文件系统挂载错误,new.txt实际未被放到对应路径下。

解决方法

  • 先使用绝对路径测试:将代码中的文件名改为绝对路径,例如const char* filename = "fs0:\\myapp\\new.txt";(注意路径中的反斜杠需要转义),如果可以正常打开,即可确认是相对路径解析问题。
  • 若需要自动读取同目录下的文件,可通过UEFI的gEfiLoadedImageProtocol获取当前EFI程序的加载路径,去掉末尾的二进制文件名后和new.txt拼接,得到完整的文件绝对路径再传给fopen。
  • 可在fopen失败时打印错误信息排查问题:添加#include <errno.h>后,在else分支添加printf("open failed, errno: %d, reason: %s\n", errno, strerror(errno));即可得到具体失败原因。

内容的提问来源于stack exchange,提问作者Faris Kamal Kakkengal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:36:00