tellg() 関数が一貫性のないファイル サイズを報告する
ユーザーがファイルをバッファに読み取ろうとすると、ユーザーが使用する際に誤った結果が発生する可能性があります。 Tellg()関数。予想とは異なり、tellg() は実際のファイル サイズやバイト オフセットではなくトークン値を報告します。この矛盾は、関数の意図された目的に起因する可能性があります。
技術的には、tellg() はファイル サイズやその正確な位置をバイト単位で直接示しません。むしろ、プログラムがファイル内の同じ場所に再度アクセスできるようにするトークンを提供します。トークンの値は、整数データ型に変換できることは保証されていません。
Unix ベースのシステムでは、tellg() は通常、ファイルの先頭からのバイト オフセットを表します。ただし、Windows システムでは、その動作はファイルのオープン モードに応じて異なります。バイナリ ファイルの場合、オフセットは Unix の動作に似ています。ただし、テキスト モードでは、tellg() の出力と、特定の位置に到達するために必要な実際のバイト数の間に直接の相関関係はありません。
ファイル内の読み取り可能なバイト数を正確に判断するには、最も信頼できる方法は、読み取りプロセスを試みることです。これは、次の手順を使用して実現できます。
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 );
ここでは、無視を使用してファイルの終わりまで読み取ります。 gcount() の値は、実際のバイト数を示します。
補足:
以上がTellg() が一貫性のないファイル サイズを報告するのはなぜですか? ファイル サイズを正確に判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。