我以二进制模式打开了一个文件,进行以下操作得到了 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/