tellg() の誤解: ファイル サイズの報告
コード スニペットで、tellg() 関数が値を返すという問題が発生しました。 read() 関数によって読み取られるファイルの実際のサイズよりも大きくなります。この矛盾は、tellg() の目的の誤解から生じています。
Tellg の関数
一般的な考えに反して、tellg() は、ファイル、または先頭からのオフセット (バイト単位)。代わりに、トークン値、つまり後でファイル内の同じ位置に戻るために使用できるプレースホルダーを返します。実際に返される数値は、オペレーティング システムとファイル モードによって異なります。
実際の実装
実際には、Unix システムでは、tellg() はバイト単位でオフセットを返します。 , Windows では、バイナリ モードで開かれたファイルのオフセットのみを返します。 Windows のテキスト モードの場合、戻り値は、その位置に到達するために必要なバイト数を正確に反映していない可能性があります。
正確なバイト数
バイト数を正確に判断するには読み取り可能なバイト数が限られている場合、信頼できる唯一の方法は読み取り操作を実行することです。これは、次のような手法を使用して実現できます:
#include <limits> file.ignore( std::numeric_limits<std::streamsize>::max() ); std::streamsize length = file.gcount(); file.clear(); // Since ignore will have set eof. file.seekg( 0, std::ios_base::beg );
その他の観察
tellg() の問題に加えて、コードには追加のエラーが含まれています:
これらの問題に対処することで、コードはファイルのサイズを正確に判断し、読み取りを実行できるようになります。意図したとおりに動作します。
以上がC で `tellg()` がファイル サイズを正確に報告しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。