作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以,我很好奇,因为我一直在使用这种相当有用的方法来获取文件的大小,但有些事情困扰着我。将流锁定到文件系统上的文件和
fileStream.seekg(0, std::ios::beg);
int beginning = fileStream.tellg();
产生 0。这是意料之中的,我们利用了从零开始计数的好处。对我来说有趣的是,一个 512 字节的文件的位置在 [0, 511] 范围内,因此返回值
fileStream.seekg(0, std::ios::end);
int end = (int)fileStream.tellg(); // We don't care for +4GB here
应该为结束产生 511,因为那是最后一个字节。加载文件中的最后位置。因此,任何用于读取流的缓冲区都只会获得 511 字节,而不是 512 字节。
但它有效,所以你可以看到我的困惑。是什么赋予了?我不知所措。 +1 从何而来?
最佳答案
之后,
fileStream.seekg(0, std::ios::end);
文件指针位于 紧接 最后一个字节 (#511) 的位置。这就是数字 512 所表示的。在这里,511 表示就在最后一个字节之前。
让我们考虑一个两个字节长的文件:
关于c++ - seekg、tellg、从零开始的计数和文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14547122/
我是一名优秀的程序员,十分优秀!