std :: ifstream :: seekg没有失败的荒谬偏移

时间:2016-10-05 22:16:02

标签: c++ ifstream seekg

显然,在Linux(Centos 7,g ++(GCC)4.8.5 20150623(Red Hat 4.8.5-4))上,您可以在打开阅读的文件中寻找荒谬的偏移量。我可以自己获取文件长度并检查偏移量,但是seekg不应该失败吗?

这个节目说明了。没有检测到错误条件,但文件长度远小于999999字节。

#include <iostream>
#include <fstream>

int main(int argc, char **argv) {

    std::ifstream f("./tstseek.cpp",std::ios::in);
    if(!f.seekg(9999999)) {
        std::cerr << "SEEK FAILED" << std::endl;
    }
    long int pos = f.tellg();
    if(f.bad() || f.fail()) {
        std::cerr << "SEEK FAILED" << std::endl;
    }
    if(f.eof()) {
        std::cerr << "EOF AFTER SEEK" << std::endl;
    }
    std::string s;
    std::getline(f,s);
    if(f.bad() || f.fail()) {
        std::cerr << "getline failed" << std::endl;
    }
    if(f.eof()) {
        std::cerr << "EOF after getline" << std::endl;
    }
    std::streamsize bytesread = f.gcount();
    std::cerr << "Position after seekg(9999999) = " << pos << std::endl
                 << "bytes read = " << bytesread << std::endl
                 << "string=[" << s << "]" << std::endl;
}

0 个答案:

没有答案