CLion(C++)中使用SFML运行程序提示无法打开img.png,但终端编译运行正常的问题求助
解决CLion运行时无法打开"img.png"但终端正常的问题
这种情况我碰到过好几次,核心原因几乎都是CLion默认的运行工作目录和你在终端手动编译运行时的工作目录不一致。终端里你大概率是在项目根目录(或者img.png所在的目录)执行的可执行文件,但CLion默认会把工作目录设成编译输出目录(比如cmake-build-debug),导致程序找不到图片文件。
下面给你几个实用的解决方案,按推荐程度排序:
方案1:修改CLion运行配置的工作目录(首推)
这是一劳永逸的方法,让CLion运行程序时和终端用相同的工作目录:
- 点击CLion右上角的运行配置下拉菜单(就是显示你项目名的那个下拉框),选择
Edit Configurations... - 在弹出的配置窗口里,找到你当前的运行配置(一般和项目同名)
- 找到
Working directory选项,点击右侧的文件夹图标,选择你的项目根目录(或者直接是img.png所在的具体目录) - 点击
Apply保存,再点OK关闭窗口,重新运行程序应该就能找到图片了
方案2:在代码中打印当前工作目录排查问题
如果不确定到底是哪个目录的问题,可以在代码里加一行打印当前工作目录的代码,快速定位:
#include <iostream> #include <filesystem> // 需要C++17及以上标准,如果是旧标准可以用getenv("PWD") int main() { // C++17写法 std::cout << "当前工作目录:" << std::filesystem::current_path() << std::endl; // 旧C++标准备选写法 // std::cout << "当前工作目录:" << getenv("PWD") << std::endl; // 你的原有代码... return 0; }
运行后对比CLion输出的目录和你终端里执行pwd得到的目录,就能明确两者的差异,再针对性调整。
方案3:临时应急的方法(不推荐长期用)
如果赶时间不想改配置,有两个临时办法:
- 把
img.png手动复制到CLion的编译输出目录(比如cmake-build-debug),这样程序在默认工作目录下就能找到文件,但每次图片更新都要手动复制,很麻烦 - 在代码里把图片路径改成绝对路径,比如:
// 原来的相对路径写法 // std::ifstream img("img.png"); // 改成绝对路径(替换成你实际的文件路径) std::ifstream img("/Users/yourname/Projects/your-project/img.png");
这种方法的问题是换电脑或者移动项目后需要重新修改路径,灵活性很差。
内容的提问来源于stack exchange,提问作者Betydlig
相关产品推荐
相关产品推荐

