我已经以二进制模式打开了一个文件,下面的操作给出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。

最佳答案

我已经对此发表了评论,但我认为这也是答案:

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

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

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

关于c++ - tellg()返回否定答案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8007048/

10-11 00:22