c++ - tellg() 返回否定答案

标签 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。

最佳答案

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

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

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

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

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

相关文章:

Python循环读取并解析目录中的所有内容

c# - 使用大量小 XML 文件使 LINQ 的文件 IO 更高效?

c++ - VS2010 链接器错误

c++ - 在从 Boost 派生的类派生的类中自动禁止复制是不可复制的吗?

c++ - fatal error : openssl/e_os2. h:没有那个文件或目录

c++ - 在计算实验期间将结果写入文件的有效方法

java - 带有文件 I/O 和数组列表的 JTable

c++ - MSVS 链接器在静态常量字符串之间添加数据

c++ - 在案例中更改开关变量

c++ - 如何通过跳过=从txt文件中读取整数?