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

why do we need to find file size using seekg and tellg

本文关键字:tellg 查找 文件大小 seekg 我们 为什么      更新时间:2023-10-16

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

首先,不能保证您能找到文件大小使用CCD_ 1和CCD_;tellg的返回类型不是保证可转换为积分类型,即使是可转换的,不能保证数值代表任何真实的东西。这种技术恰好在Unix,在Windows下,如果文件已以二进制文件打开模式对于"文件大小"的某些定义,通常仅如果文件中充满了"C"语言环境。

为什么会这样?原因在于如何定义文件大小在大多数这样的情况下,用户似乎想要char他可以在遇到文件末尾之前读取。在更多一般上下文中,定义将是文件在磁盘上占用。而且大多数系统都无法至少不直接确定其中的任何一个。在Unix下(在Windows下,如果文件以二进制模式打开)系统报告的文件大小与数字不一致的char,前提是filestream不进行代码翻译,或翻译代码一对一。(这对于"C"answers"POSIX"是有保证的地区。)

C++仍然试图支持大多数平台,当然也在尝试以支持大型机。因此,它没有标准化无法在某些平台上实现的功能。C++11引入了"条件支持特征"的概念,然而也许是一个有条件支持的文件的提案大小函数是可以接受的。到目前为止,我还不知道然而,任何提出过这样建议的人。