seekg如何找到文件的末尾

How does seekg find the end of the file?

本文关键字:文件 何找 seekg      更新时间:2023-10-16

在使用seekg&在一份文件上,我想知道引擎盖下发生了什么?

    // Open file and get file size
    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();
    }

Q1:seekg是否真的遍历了文件的全部内容,直到找到一些特殊的"EOF字符"?还是使用文件系统提供的其他信息来"知道"文件的末尾在哪里?

Q2:seekg是一个流搜索操作。这是否意味着文件的全部内容必须通过流?

如果我对这一切的运作方式只有一个初步的了解,请原谅我。

Q1:No。操作系统将知道文件的大小,seekg()将使用该知识——无论文件是1100字节还是10000000000字节,都需要几乎相同的时间。

Q2:没有。它只是设置当前的"get指针",在Windows或Linux系统中,它可以翻译为"SetFilePos"或"lseek"。几乎所有其他操作系统都有类似的概念。