В сценарии с использованием 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: Нет. ОС будет знать размер файла, и seekg()
будет использовать эти знания — это займет почти одинаковое время, если файл длиной 1, 100 или 10000000000 байт.
Q2: Нет. Он просто устанавливает текущий «указатель получения», который переводится в «SetFilePos» или «lseek» в системе Windows или Linux. Почти все другие ОС имеют схожие концепции.
Других решений пока нет …