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