Visual Studio 2019下SFML调用loadFromFile加载图片提示无法打开文件怎么办
问题原因
报错核心为程序运行时无法在当前工作目录下找到enemy.png文件,与SFML配置无关联,具体诱因如下:
- Visual Studio调试运行时的默认工作目录与
main.cpp所在的源文件目录不一致;若直接双击运行生成的exe文件,此时工作目录为exe所在的文件夹,也与源文件目录不匹配 - Windows系统默认隐藏已知文件扩展名,图片实际文件名为
enemy.png.png,代码中填写的路径与实际文件名不匹配 - 图片文件被其他程序占用、当前账号无该文件的读取权限
解决方法
方案1:统一文件存放路径(最推荐)
将enemy.png放到程序运行时的工作目录下即可:
- 若在Visual Studio内点击调试按钮运行:VS默认工作目录为
.vcxproj项目文件所在的目录,对应你场景的路径为D:\XXX\XXX\Project1\Project1\,将图片放入该目录即可 - 若直接双击生成的exe运行:将图片放入和
Project1.exe同目录的D:\XXX\XXX\Project1\x64\Debug\路径下即可
方案2:修改Visual Studio调试工作目录
无需重复复制图片的配置方法:
- 右键项目名称->属性->调试
- 找到「工作目录」配置项,修改为你存放
enemy.png的目录(比如main.cpp所在的源文件目录) - 配置完成后仅需在该目录下存放一份图片,调试运行时即可正常读取
方案3:使用绝对路径(临时调试用)
可填写完整绝对路径验证文件本身是否可正常读取,示例:
if (!texture.loadFromFile("D:/XXX/XXX/Project1/Project1/enemy.png"))
注意路径分隔符需使用/或者转义后的\\,不可直接使用单个\。
附加排查项
若以上操作后仍报错,可打开资源管理器的「查看」选项卡,勾选「文件扩展名」,确认图片文件的实际名称确实为enemy.png而非enemy.png.png。
额外说明:你构建输出中的两个警告是因为sf::VideoMode要求传入无符号整数参数,你定义的windowHeight和windowWidth为float类型,将两个变量的类型改为unsigned int即可消除警告。
内容的提问来源于stack exchange,提问作者user16208301
相关产品推荐
相关产品推荐

