tellg()返回否定答案

时间:2011-11-04 09:18:36

标签: c++ file-io

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

infile.seekg(0, ios::end);
__int64 x = infile.tellg();

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

typedef basic_ifstream<unsigned char, std::char_traits<unsigned char> > uifstream;

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

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

2 个答案:

答案 0 :(得分:4)

我已将此作为评论,但我认为这也是答案:

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

(还有tellg()在出现错误时返回-1,但我假设您看到其他负值)

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

答案 1 :(得分:0)

这是一个与VS2010兼容的脏解决方案:

__int64 size = *(__int64*) ( ((char*)&(infile.tellg())) +8)