好了,说明从IDE运行的怪癖这里有一个小测试,我做到了。希望这应该能帮助你找出VS中相对路径的工作方式。
所以我的文件夹结构是这样的:
/_Sandbox
_Sandbox.sln
/Debug
_Sandbox.exe
/shaders
color.vert
/_Sandbox
_Sandbox.proj
main.cpp
的代码如下:
#include <iostream>
#include <string>
#include <sys/stat.h>
int main(int argc, char* argv[])
{
struct stat info;
std::string path = "shaders/color.vert"; // To not I get the same behavior with "shaders\\color.vert"
int ret = stat(path.c_str(), &info);
ret == 0 ? std::cout << "File found." << std::endl : std::cout << "File doesn't exist." << std::endl;
std::cin.get();
return 0;
}
所以,如果我在IDE中运行,我得到“文件不存在。 “,如果我在IDE之外运行,则会得到”File Found“。为了使程序从内部VS找到着色器文件,我必须把着色器文件夹,如下所示:
/_Sandbox
_Sandbox.sln
/Debug
_Sandbox.exe
/_Sandbox
/shaders
color.vert
_Sandbox.proj
main.cpp
但是,您可以让代码从内部和外部的IDE找到该文件夹。你必须做的是去你的项目的设置。在“调试”中将“工作目录”更改为$(SolutionDir)$(Configuration)\
希望这可以为您解决问题。
调用'stat'后'errno'的值是多少?它是“ENOENT”(表示无法找到该文件)还是其他内容?你在调试器中运行这个吗?如果是这样,你确定你的启动路径是你的想法吗(提示;可能不是,将其设置在项目的调试设置中)。 –
如果从IDE运行,应用程序的路径不是应用程序的路径,而是'.proj'文件(或'.sln')的路径。所以shaders/color.vert可能确实不存在相对于该位置。 – Borgleader
是的,我正在从IDE运行它。嗯,那么正确的道路是什么? – user1796942