在使用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();
}
Run Code Online (Sandbox Code Playgroud)
Q1: seekg是否真正遍历文件的全部内容,直到找到一些特殊的"EOF字符"?或者它是否使用文件系统提供的一些其他信息来"知道"文件末尾的位置?
Q2: seekg是一个寻求流的操作.这是否意味着文件的整个内容必须通过流?
请原谅我,如果我对这一切的运作方式只有基本的了解.
Q1:不会.操作系统会知道文件的大小,seekg()并将使用这些知识 - 文件的长度是1,100或10000000000字节几乎相同.
Q2:不.它只是设置当前的"获取指针",在Windows或Linux系统中转换为"SetFilePos"或"lseek".几乎所有其他操作系统都有类似的概念.