文本文件的长度

时间:2014-04-16 15:21:41

标签: c++

我刚开始学习OpenGL,但我遇到了一个小问题。我写了一个自定义函数来从文件中读取着色器,这里是。

char* ReadShaderSource(const char* path)
{
    std::ifstream is(path, std::ios::in);

    if (!is)
        return NULL;

    is.seekg(0, std::ios::end);
    long size = is.tellg();

    is.seekg(0, std::ios::beg);
    char *src = new char[size + 1];
    is.read(src, size);
    src[size] = '\0';

    return src;
}

正如您所看到的,在将指针移动到文件末尾之后,我使用is.tellg()来获取文件的大小。但是,在一个简单的着色器中,它显示的计数超过它实际的数量。     #version 150

in vec4 pos;

void main()
{
    gl_Position = pos;
}

这里,大小应该是66(我手动计算,我可能会被1或2个字符关闭)。但是,它显示为73.我认为\ n \ r被读为\ n可能与错误的字符数有关,但我不确定。

无论哪种方式,我的问题是,为什么我得到错误的数字,我怎么能正确地得到它。

注意:我知道计算文件大小的其他方法,或者更好的是,直接读取std :: string中的内容然后将它们转换为char *,但我想知道问题是什么在这段代码中,以及我如何解决它。

1 个答案:

答案 0 :(得分:1)

你没有计算6个回车字符和一个标签(它总计你缺少的7个字符),但tellg()确实如此。