【问题标题】:ifstream No such file or directory C++ifstream 没有这样的文件或目录 C++
【发布时间】:2020-01-21 05:14:46
【问题描述】:

所以我正在尝试用 C++ 编写一个类似于this 的着色器类。这是我的文件结构:

| -- /source
|    | --  main.cpp
|    | -- /Shaders
|    |    | -- Shader.h
|    |    | -- shader.frag
|    |    | -- shader.vert

在我的 main.cpp 文件中,我导入了 shaders.h。 Shaders.h 包含着色器类,它从 shader.frag 和 shader.vert 文件中读取着色器代码(或者应该如此)。我从 main.cpp 传递的路径是 Shaders/shader.fragShaders/shader.vert,我收到错误 No such file or directory

这是我(或他们)相关的着色器代码:

#ifndef SHADER_H
#define SHADER_H

#include <glad/glad.h>

#include <string>
#include <fstream>
#include <sstream>
#include <iostream>
Shader(const char* vertexPath, const char* fragmentPath)
    {
        // 1. retrieve the vertex/fragment source code from filePath
        std::string vertexCode;
        std::string fragmentCode;
        std::ifstream vShaderFile;
        std::ifstream fShaderFile;
        // ensure ifstream objects can throw exceptions:
        vShaderFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);
        fShaderFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);
        try
        {
            // open files
            vShaderFile.open(vertexPath); <------- this is where it is getting caught
            fShaderFile.open(fragmentPath); <---------- and i assume it would be here as well
            std::stringstream vShaderStream, fShaderStream;

            // read file's buffer contents into streams
            vShaderStream << vShaderFile.rdbuf();
            fShaderStream << fShaderFile.rdbuf();

            // close file handlers
            vShaderFile.close();
            fShaderFile.close();

            // convert stream into string
            vertexCode = vShaderStream.str();
            fragmentCode = fShaderStream.str();
        }
        catch (std::ifstream::failure e)
        {
            char buffer[256];
            strerror_s(buffer, 256, errno);
            printf("ERROR::SHADER::FILE_NOT_SUCCESFULLY_READ: %s\n", buffer);
        }
...

我尝试了多种不同的路径变体。我也尝试过传递绝对路径,并且始终得到相同的错误。我非常感谢您对此提供任何帮助。

【问题讨论】:

  • 那个是txt文件还是json文件?@Saucy Dumpling
  • 它只是一个文本文件。你认为我应该尝试重命名为 .txt 吗?
  • 在打开代码时提到 .txt(即)vShaderFile.open("FILENAME.txt");,但请确保文件夹中存在的文件是 txt 不要重命名它。但是该文件应该存在于源代码所在的同一文件夹中
  • 我怀疑文件后缀是你的问题。您可以阅读带有任何后缀的文本文件。如果您使用 IDE(例如 VisualStudio),则可以将二进制文件编译到单独的文件夹中。因此,当应用程序启动时,当前目录不是源文件夹,而是二进制文件所在的文件夹(默认情况下)。使用绝对文件路径或调整已启动应用程序的当前目录。在 VisualStudio 中,有一个设置(在主项目的调试下),但其他 IDE 肯定也提供了它。
  • 您可以做一个非常简单的检查:从您的函数std::ofstream ct; ct.open("bla.txt"); ct &lt;&lt; "klaf"; 写入一个新文件,然后查看显示新文件的源代码树。这应该告诉你目录根在哪里。

标签: c++ file path ifstream


【解决方案1】:

您只需要包含&lt;fstream&gt; 库。

【讨论】:

  • fstream 库实际上是包含在内的,我只是没有在我的示例代码中显示。我将更新问题以显示包含的内容。
猜你喜欢
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 2021-06-24
  • 2016-03-29
  • 2021-05-15
  • 2020-07-16
  • 2014-10-26
相关资源
最近更新 更多