C++ seekg如何找到文件的结尾?

C++ seekg如何找到文件的结尾?,c++,fstream,seekg,C++,Fstream,Seekg,在一个使用seekg&tellg文件的场景中,我想知道引擎盖下发生了什么 // 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);

在一个使用seekg&tellg文件的场景中,我想知道引擎盖下发生了什么

    // 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:不。操作系统将知道文件的大小,并且
seekg()
将使用这些知识-无论文件的长度是1100字节还是1000000000字节,几乎需要相同的时间


问题2:不是。它只是设置当前的“get指针”,在Windows或Linux系统中,它转换为“SetFilePos”或“lseek”。几乎所有其他操作系统都有类似的概念

谢谢,真是太好了helpful@MatsPeterson我一直在试图找出获取文件大小的最佳方法,如果ifstream已经从文件系统中知道了文件的大小,那么对我来说,我们必须做一些事情,比如转到文件的末尾,获取大小,然后返回到开始。或者,正如一些人声称seekg-to-end和tellg方法不可靠的那样,忽略到底,然后获取读取的字符数。然后我看到了struct stat方法,但我不确定它的可移植性。是否没有简单的方法?关于“EOF字符”: