2012-11-30 35 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)\

希望這可以爲您解決問題。

相關問題