好了,說明從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