tellg()返回否定答案

c0d*_*0da 5 c++ file-io

我已经以二进制模式打开了一个文件,下面的操作给出x的负值。我打开的文件大小约为2.5 GB。

infile.seekg(0, ios::end);
__int64 x = infile.tellg();
Run Code Online (Sandbox Code Playgroud)

我需要infile读取字节(无符号字符),因此我uifstream通过执行以下操作将其定义为:

typedef basic_ifstream<unsigned char, std::char_traits<unsigned char> > uifstream;
Run Code Online (Sandbox Code Playgroud)

这基本上是标准的ifstream,但使用unsigned chars代替chars

编辑:我正在使用Visual Studio 2005,并将uofstream更正为uifstream。

rve*_*rve 5

我已经把它放在评论中,但我认为这也是答案:

VS2005 中的 STL 不支持大于 2147483647 (~2GB) 的偏移量,因此寻找或告诉超出该位置的位置不起作用,并且会解释负值。(见这里

tellg()出现错误时也会返回 -1,但我假设您看到的是其他负值)

解决方案是使用较新的编译器 (VS2010) 或使用替代 STL 实现,如 STLPort