ファイルのサイズを取得するためにこのかなり便利なアプローチを使用してきたので、私は興味がありますが、何か気になります。ファイル システム上のファイルへのストリームをロックし、
fileStream.seekg(0, std::ios::beg);
int beginning = fileStream.tellg();
これは当然のことです。ゼロベースのカウントの利点を利用しています。私にとって興味深いのは、512 バイトのファイルの位置が [0, 511] の範囲にあるため、次の値を返すことです。
fileStream.seekg(0, std::ios::end);
int end = (int)fileStream.tellg(); // We don't care for +4GB here
これは最後のバイトであるため、end には 511 が返されます。ロードされたファイル内の最後の位置。したがって、ストリームの読み取りに使用されるバッファは、512 バイトではなく 511 バイトしか取得できません。
しかし、それはうまくいくので、私の混乱を見ることができます。何を与える?私は途方に暮れています。+1はどこから来ますか?