2012-11-30 27 views
0

这是我有检查,如果一个文件在我的Visual Studio 2010中C++项目中存在的代码:如何在visual studio C++ 2010中检查文件是否存在stat?

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

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

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

你能看到有什么问题吗?

感谢

+0

调用'stat'后'errno'的值是多少?它是“ENOENT”(表示无法找到该文件)还是其他内容?你在调试器中运行这个吗?如果是这样,你确定你的启动路径是你的想法吗(提示;可能不是,将其设置在项目的调试设置中)。 –

+1

如果从IDE运行,应用程序的路径不是应用程序的路径,而是'.proj'文件(或'.sln')的路径。所以shaders/color.vert可能确实不存在相对于该位置。 – Borgleader

+0

是的,我正在从IDE运行它。嗯,那么正确的道路是什么? – user1796942

回答

2

好了,说明从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)\

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

相关问题