如何在Visual Studio c ++ 2010中使用stat检查文件是否存在

How to check if a file exists with stat in visual studio c++ 2010?

本文关键字:stat 检查 文件 存在 是否 2010 Visual Studio      更新时间:2023-10-16

这是我用于检查我的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,并且着色器是我的项目主文件夹中的一个文件夹。

你能看出不对劲吗?

谢谢

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

希望这能为您解决问题。