我有一个基本的问题,为什么我们必须使用seekg将指针移动到流的末尾然后使用tellg然后将指针移回到开头。 我知道它是找到文件大小但为什么我们需要文件大小?
int myFileSize;
std::fstream myFile;
myFile.open(myFileName, std::ios::in|std::ios::binary);
if (myFile.is_open())
{
myFile.seekg(0, std::ios::end);
myFileSize = myFile.tellg();
myFile.seekg(0, std::ios::beg);
myFile.close();
}
答案 0 :(得分:1)
首先,无法保证您可以找到文件大小
使用seekg
和tellg
; tellg
的返回类型不是
保证可转换为整数类型,即使它
是可转换的,不能保证数值
代表任何真实。这种技术恰好在下工作
Unix,以及Windows if 文件已在二进制文件中打开
模式。对于“文件大小”的某些定义,通常只有
如果文件充满了“C”语言环境。
为什么会这样?原因从定义文件的方式开始
尺寸。在大多数此类情况下,用户似乎想要的数量
char
他在遇到文件结束之前可以阅读。在更多
一般上下文,定义将是字节数
文件占用磁盘。大多数系统都没有办法
确定其中任何一个,至少不是直接的。在Unix下
(在Windows下,如果文件以二进制模式打开),
系统报告的文件大小确实对应于该数字
您可以阅读的char
,只要该地区充满了
filestream
没有代码翻译或翻译代码
一对一。 (这是“C”和“POSIX”的保证
区域设置。)
C ++仍然试图支持大多数平台,当然也会尝试 支持大型机。因此,它没有标准化 在某些平台上无法实现的功能。 C ++ 11 介绍了“有条件支持的功能”的概念, 然而;也许是有条件支持的文件的提案 尺寸功能是可以接受的。到目前为止,我还没有意识到 但是,任何提出这样建议的人都会。