1

这是我用于检查 Visual Studio 2010 C++ 项目中是否存在文件的代码:

bool GLSLProgram::fileExists( const string & fileName )
{
    struct stat info;
    int ret = -1;

    ret = stat(fileName.c_str(), &info);
    return 0 == ret;
}

我不确定为什么当该文件确实存在时它会为“shaders/color.vert”返回 false,并且着色器是我项目主文件夹中的一个文件夹。

你能看出有什么不对吗?

谢谢

4

1 回答 1

3

好的,为了说明从 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 之外运行它,我会得到“文件找到”。为了让程序从 VS 中找到着色器文件,我必须像这样放置着色器文件夹:

/_Sandbox
    _Sandbox.sln
    /Debug
        _Sandbox.exe
    /_Sandbox
        /shaders
            color.vert
        _Sandbox.proj
        main.cpp

但是,您可以获取代码以从 IDE 内部和外部查找文件夹。您要做的是转到项目的设置。在“调试”中并将“工作目录”更改为$(SolutionDir)$(Configuration)\

希望这可以为您解决问题。

于 2012-11-30T20:26:58.210 回答