为什么我们需要使用seekg和tellg查找文件大小

时间:2014-10-09 07:54:11

标签: c++

我有一个基本的问题,为什么我们必须使用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();
}

1 个答案:

答案 0 :(得分:1)

首先,无法保证您可以找到文件大小 使用seekgtellg; tellg的返回类型不是 保证可转换为整数类型,即使它 是可转换的,不能保证数值 代表任何真实。这种技术恰好在下工作 Unix,以及Windows if 文件已在二进制文件中打开 模式。对于“文件大小”的某些定义,通常只有 如果文件充满了“C”语言环境。

为什么会这样?原因从定义文件的方式开始 尺寸。在大多数此类情况下,用户似乎想要的数量 char他在遇到文件结束之前可以阅读。在更多 一般上下文,定义将是字节数 文件占用磁盘。大多数系统都没有办法 确定其中任何一个,至少不是直接的。在Unix下 (在Windows下,如果文件以二进制模式打开), 系统报告的文件大小确实对应于该数字 您可以阅读的char,只要该地区充满了 filestream没有代码翻译或翻译代码 一对一。 (这是“C”和“POSIX”的保证 区域设置。)

C ++仍然试图支持大多数平台,当然也会尝试 支持大型机。因此,它没有标准化 在某些平台上无法实现的功能。 C ++ 11 介绍了“有条件支持的功能”的概念, 然而;也许是有条件支持的文件的提案 尺寸功能是可以接受的。到目前为止,我还没有意识到 但是,任何提出这样建议的人都会。